python中的循环未正确递增

时间:2019-04-26 06:24:33

标签: python loops for-loop while-loop python-multithreading

我正在python中使用带有范围函数(range(0,100000 )的for循环。

在循环内部,我正在创建一个线程来调用某个方法来执行某些任务,并将循环索引作为参数传递给线程的目标函数。

我观察到循环中的索引值不会在每次迭代中递增。
相反,它会多次生成相同的索引,有时会跳过迭代

for index in range(0,100000):                                                         
    t=Thread(target=somefunction,args=(index,)                                  
    t.start()                                                                                                
    t.join()            

somefunction内,我正在执行一些操作,还正在打印索引值。相同的索引值被打印,这意味着循环没有正确地增加。 请帮助

1 个答案:

答案 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