猿问

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

之前可能已经问过几次类似的问题,但它们似乎都没有我的案例/场景,或者它不起作用。


我正在尝试对一个 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 question


for arrayval in array:

    dosomething(arrayval)

这应该通过数组循环并执行功能dosomething与变量a,那么b,c等等。


关于我如何做到这一点的任何想法?


DIEA
浏览 406回答 1
1回答

墨色风雨

您可以使用threading.Thread:from threading import Threadfrom time import sleepfrom random import randintdef 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 秒内以随机顺序输出:ebcad如果要限制线程数,可以multiprocessing.pool.ThreadPool改用。以下示例将工作线程的数量限制为 2,因此可能需要长达 15 秒的时间才能完成(如果所有工作人员恰好需要 5 秒):from multiprocessing.pool import ThreadPoolfrom time import sleepfrom random import randintdef dosomething(var):    sleep(randint(1,5))    print(var)array = ["a", "b", "c", "d", "e"]with ThreadPool(processes=2) as pool:    pool.map(dosomething, array)
随时随地看视频慕课网APP

相关分类

Python
我要回答