【发布时间】:2018-10-25 08:49:43
【问题描述】:
我想在 python 中定义一个do_in_parallel 函数,它将接收带参数的函数,为每个函数创建一个线程并并行执行它们。该函数应该这样工作:
do_in_parallel(_sleep(3), _sleep(8), _sleep(3))
然而,我很难定义 do_in_parallel 函数来接受多个函数,每个函数都有多个参数,这是我的尝试:
from time import sleep
import threading
def do_in_parallel(*kwargs):
tasks = []
for func in kwargs.keys():
t = threading.Thread(target=func, args=(arg for arg in kwargs[func]))
t.start()
tasks.append(t)
for task in tasks:
task.join()
def _sleep(n):
sleep(n)
print('slept', n)
这样使用它,并得到以下错误:
do_in_parallel(_sleep=3, _sleep=8, _sleep=3)
>> do_in_parallel(sleepX=3, sleepX=8, sleepX=3)
^
>> SyntaxError: keyword argument repeated
有人可以解释一下我需要在我的函数中进行哪些更改,以便它可以采用多个函数参数:
do_in_parallel(_sleep(3), _sleep(8), maybe_do_something(else, and_else))
【问题讨论】:
-
@VineethSai 嗯...只有当我将 args 部分从线程中取出,但它不会并行执行它们
-
用
list代替**kwargs**,除了这个一个for <args>就够了。 -
@stovfl 你是什么意思'除了这个
就足够了' -
你在做
for func in kwargs.keys():,在for arg in kwargs[func]里面。更改为args=kwargs[func]。
标签: python multithreading function concurrency arguments