我正在python中使用带有范围函数(range(0,100000 )
的for循环。
在循环内部,我正在创建一个线程来调用某个方法来执行某些任务,并将循环索引作为参数传递给线程的目标函数。
我观察到循环中的索引值不会在每次迭代中递增。
相反,它会多次生成相同的索引,有时会跳过迭代
for index in range(0,100000):
t=Thread(target=somefunction,args=(index,)
t.start()
t.join()
在somefunction
内,我正在执行一些操作,还正在打印索引值。相同的索引值被打印,这意味着循环没有正确地增加。
请帮助
答案 0 :(得分:0)
您可以实施以下类似方法来解决此问题。线程将运行完整的程序,这就是循环无法正确递增的原因。
我在这里使用了map(将给定的函数应用于给定的iterable的每个项目)将参数传递给function
from multiprocessing.dummy import Pool as ThreadPool
import time
import datetime
def operation(value):
# whatever operation needs to be performed
print("{} : Thread no {}\n".format(datetime.datetime.now(),value))
time.sleep(20)
# Data/tasks needs to be processed added in list
Data = [1,2,3,4,5,6,7,8,9]
# Creating pools
c_pool = ThreadPool(5) # using 5 threads
c_pool.map(operation, Data) # using map method to perform operation
c_pool.close()
c_pool.join()
它将同时执行5个任务/操作。
这里1st 5被采取
2019-04-26 **12:47:37**.800258 : Thread no 1
2019-04-26 **12:47:37**.800258 : Thread no 2
2019-04-26 **12:47:37**.800258 : Thread no 3
2019-04-26 **12:47:37**.800258 : Thread no 4
2019-04-26 **12:47:37**.800258 : Thread no 5
在20秒(time.sleep(20))之后开始5休息
2019-04-26 **12:47:57**.809258 : Thread no 6
2019-04-26 **12:47:57**.809258 : Thread no 7
2019-04-26 **12:47:57**.809258 : Thread no 8
2019-04-26 **12:47:57**.809258 : Thread no 9