python-如何编写一个多线程函数以同时处理不同的任务?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-如何编写一个多线程函数以同时处理不同的任务?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1989字,纯文字阅读大概需要3分钟。
内容图文
![python-如何编写一个多线程函数以同时处理不同的任务?](/upload/InfoBanner/zyjiaocheng/690/eb53f2c49fe24f15ab18a91065927021.jpg)
我想在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))
解决方法:
do_in_parallel(_sleep(3), _sleep(8), maybe_do_something(else, and_else))
由于您要将目标函数的结果传递给do_in_parallel(您已经在调用_sleep等),因此该调用结构将无法正常工作.
相反,您需要做的是捆绑任务并将这些任务传递给您的处理功能.这里的任务是一个元组,包含要调用的目标函数和一个参数元组task =(_sleep,(n,)).
我建议您然后使用ThreadPool和apply_async方法来处理单独的任务.
from time import sleep
from multiprocessing.dummy import Pool # .dummy.Pool is a ThreadPool
def _sleep(n):
sleep(n)
result = f'slept {n}'
print(result)
return result
def _add(a, b):
result = a + b
print(result)
return result
def do_threaded(tasks):
with Pool(len(tasks)) as pool:
results = [pool.apply_async(*t) for t in tasks]
results = [res.get() for res in results]
return results
if __name__ == '__main__':
tasks = [(_sleep, (i,)) for i in [3, 8, 3]]
# [(<function _sleep at 0x7f035f844ea0>, (3,)),
# (<function _sleep at 0x7f035f844ea0>, (8,)),
# (<function _sleep at 0x7f035f844ea0>, (3,))]
tasks += [(_add, (a, b)) for a, b in zip(range(0, 3), range(10, 13))]
print(do_threaded(tasks))
输出:
10
12
14
slept 3
slept 3
slept 8
['slept 3', 'slept 8', 'slept 3', 10, 12, 14]
Process finished with exit code 0
内容总结
以上是互联网集市为您收集整理的python-如何编写一个多线程函数以同时处理不同的任务?全部内容,希望文章能够帮你解决python-如何编写一个多线程函数以同时处理不同的任务?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。