Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多处理未同步_Python_Multiprocessing - Fatal编程技术网

Python多处理未同步

Python多处理未同步,python,multiprocessing,Python,Multiprocessing,我遇到了多进程同步的问题 以下代码: from multiprocessing import Process list = [1,2,3,4,5] def function1(): for i in range (5): print list[i] if __name__ == '__main__': for num in range(2): Process(target=function1).start() 结果是 11 22

我遇到了多进程同步的问题 以下代码:

from multiprocessing import Process
list = [1,2,3,4,5]
def function1():
        for i in range (5):
            print list[i]

if __name__ == '__main__':
    for num in range(2):
        Process(target=function1).start()
结果是

11
22
33
44
55

如何使流程有序地工作?例如:Process1与i=1一起工作,同时Process2与i=2一起工作,依此类推?

您的函数所做的是打印数字1到5,而不管它在哪个进程中执行。您看到11、22等的原因是因为两个进程并行运行,所以它们同时打印值

您需要将进程号传递给函数,以便它知道要打印什么,然后函数所要做的就是打印进程号

这应该起作用:

from multiprocessing import Process
list = [1,2,3,4,5]
def function1(x):
    print x

if __name__ == '__main__':
    for num in range(2):
        Process(target=function1, args=[list[num]]).start()

我认为您需要创建两个不同的函数,而不是让两个线程都运行同一个函数。这种方法为列表中的每个元素创建一个进程,这可能有些过分。使用multiprocessing.Pool.map可能会更好