Python - 调用随机函数并创建线程
Python - Calling random function and creating a thread
我正在尝试从函数列表中随机调用一个函数。调用该函数时,我想启动一个新线程。
我的代码如下所示:
jobs = [func1, func2, func3, func4]
def run_threaded(job_func):
info("Number of active threads: " + str(threading.active_count()))
info("Threads list length: " + str(len(threading.enumerate())))
job_thread = threading.Thread(target=job_func)
job_thread.start()
job_thread.join()
当我调用不带括号的函数时,同一函数每隔一分钟就会被一遍又一遍地调用。即
schedule.every(1).minutes.do(run_threaded, random.choice(jobs))
当我用一个额外的括号调用函数时,即
schedule.every(1).minutes.do(run_threaded, random.choice(jobs)())
我收到以下错误:
Exception in thread Thread-7:
Traceback (most recent call last):
File "C:\Users\(USER)\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\(USER)\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
TypeError: 'bool' object is not callable
它是否期望将某些东西作为参数?我是否必须重写子类中的 运行() 方法?
交给run_threaded的功能总是一样的,所以你要么在run_threaded里面做运行dom选择,要么自己做在 schedule.every(1).minutes.do(...)
中提供的函数内部。
您的第二个代码执行 运行dom 作业选择并立即 运行 它。如果我们将该代码包装在一个函数中,以便在 run_threaded
调用此函数时完成作业选择 + 调用,它将执行您想要的操作。 lambda
很适合这里。
schedule.every(1).minutes.do(run_threaded, lambda:random.choice(jobs)())
我正在尝试从函数列表中随机调用一个函数。调用该函数时,我想启动一个新线程。
我的代码如下所示:
jobs = [func1, func2, func3, func4]
def run_threaded(job_func):
info("Number of active threads: " + str(threading.active_count()))
info("Threads list length: " + str(len(threading.enumerate())))
job_thread = threading.Thread(target=job_func)
job_thread.start()
job_thread.join()
当我调用不带括号的函数时,同一函数每隔一分钟就会被一遍又一遍地调用。即
schedule.every(1).minutes.do(run_threaded, random.choice(jobs))
当我用一个额外的括号调用函数时,即
schedule.every(1).minutes.do(run_threaded, random.choice(jobs)())
我收到以下错误:
Exception in thread Thread-7:
Traceback (most recent call last):
File "C:\Users\(USER)\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\(USER)\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
TypeError: 'bool' object is not callable
它是否期望将某些东西作为参数?我是否必须重写子类中的 运行() 方法?
交给run_threaded的功能总是一样的,所以你要么在run_threaded里面做运行dom选择,要么自己做在 schedule.every(1).minutes.do(...)
中提供的函数内部。
您的第二个代码执行 运行dom 作业选择并立即 运行 它。如果我们将该代码包装在一个函数中,以便在 run_threaded
调用此函数时完成作业选择 + 调用,它将执行您想要的操作。 lambda
很适合这里。
schedule.every(1).minutes.do(run_threaded, lambda:random.choice(jobs)())