为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用“for”循环进行多线程?

如何使用“for”循环进行多线程?

DIEA 2021-11-23 19:44:47
之前可能已经问过几次类似的问题,但它们似乎都没有我的案例/场景,或者它不起作用。我正在尝试对一个 for 循环进行多线程处理,如示例中所示。这个 for 循环将执行一个函数,因为它循环遍历一个数组。我想多线程它。例子:array = ["a", "b", "c", "d", "e"]def dosomething(var):    #dosomething this is just an example as my actual code is not relevant to this questionfor arrayval in array:    dosomething(arrayval)这应该通过数组循环并执行功能dosomething与变量a,那么b,c等等。关于我如何做到这一点的任何想法?
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

您可以使用threading.Thread:


from threading import Thread

from time import sleep

from random import randint


def dosomething(var):

    sleep(randint(1,5))

    print(var)


array = ["a", "b", "c", "d", "e"]

threads = []

for arrayval in array:

    threads.append(Thread(target=dosomething, args=(arrayval,)))

    threads[-1].start()

for thread in threads:

    thread.join()

这会在 5 秒内以随机顺序输出:


e

b

c

a

d

如果要限制线程数,可以multiprocessing.pool.ThreadPool改用。以下示例将工作线程的数量限制为 2,因此可能需要长达 15 秒的时间才能完成(如果所有工作人员恰好需要 5 秒):


from multiprocessing.pool import ThreadPool

from time import sleep

from random import randint


def dosomething(var):

    sleep(randint(1,5))

    print(var)


array = ["a", "b", "c", "d", "e"]

with ThreadPool(processes=2) as pool:

    pool.map(dosomething, array)


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 405 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信