class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
线程的参数传递:混合使用元组和字典 threading.Thread(target=方法名,args=(参数1, 参数2, ...), kwargs={"参数名": 参数1,"参数名": 参数2, ...})
例如:threading.Thread(target=song,args=(1,),kwargs={"c":3,"b":2}).start()
实验不同的参数传递方式,实践场景是多线程开启多个schedule
Python中使用线程有两种方式:函数或者用类来包装线程对象。两种方式分别如下
import schedule
import os
import datetime
import subprocess
import threading
# 方法里执行command命令
def job_fun(command):
subprocess.run(command)
# job 去做的事是开启线程,每个job 即每个线程下传参,传参是线程调的方法和参数
def job(job_func, command):
#这里传参只传了target,且函数后直接(参数)
t = threading.Thread(target=job_func(command))
t.start()
#线程启动活动后的方法
def run():
schedule.every(1).seconds.do(job, job_fun, "python tasks/1.py")
schedule.every(1).seconds.do(job, job_fun, "python tasks/2.py")
while 1:
run()
schedule.run_pending()
这种传递方式,运行起来也没问题
file1start 2020-05-04 13:37:21.344153
file1end 2020-05-04 13:37:31.344536
file2 2020-05-04 13:37:31.457617
file1start 2020-05-04 13:37:32.418298
file1end 2020-05-04 13:37:42.418716
file2 2020-05-04 13:37:42.501773
file1start 2020-05-04 13:37:43.488669
另一种参数传递方式:
import schedule
import os
import datetime
import subprocess
import threading
# 方法里执行command命令
def job_fun(command):
subprocess.run(command)
# job 去做的事是开启线程,每个job 即每个线程下传参,传参是线程调的方法名,参数
def job(job_func, command):
t = My_thread(job_func, command)
t.start()
#用类包装线程对象
class My_thread(threading.Thread):
def __init__(self,func,command):
super().__init__()
self.func = func
self.command = command
#相当于线程启动后运行方法func(command)
def run(self):
self.func(self.command)
#上面的合起来传参方式类似于threading.Thread(func,command)
def each():
schedule.every(1).seconds.do(job, job_fun, "python tasks/1.py")
schedule.every(1).seconds.do(job, job_fun, "python tasks/2.py")
while 1:
each()
schedule.run_pending()
这种方式运行起来也没有问题
file2 2020-05-04 17:52:42.780597
file2 2020-05-04 17:52:43.781734
file2 2020-05-04 17:52:43.781734
file1start 2020-05-04 17:52:43.797361
file1start 2020-05-04 17:52:43.797361
file2 2020-05-04 17:52:43.812986
file1start 2020-05-04 17:52:43.844236
file1start 2020-05-04 17:52:44.788190
file2 2020-05-04 17:52:44.794195
file1start 2020-05-04 17:52:44.830220
file2 2020-05-04 17:52:44.830220
file2 2020-05-04 17:52:44.846728
即threading.Thread(target=job_func(command))和threading.Thread(func,command)都可以的