错误在Python多进程(Error in Python multiprocessing proce

2019-10-23 03:44发布

我想要一个写有多个进程的结构和流程是这样的一个Python代码:

import multiprocessing
import ctypes
import time
import errno
m=multiprocessing.Manager()
mylist=m.list()
var1=m.Value('i',0)
var2=m.Value('i',1)
var3=m.Value('i',2)
var4=m.Value(ctypes.c_char_p,"a")
var5=m.Value(ctypes.c_char_p,"b")
var6=3
var7=4
var8=5
var9=6
var10=7
def func(var1,var2,var4,var5,mylist):
    i=0
    try:
        if var1.value==0:
            print var2.value,var4.value,var5.value
            mylist.append(time.time())
        elif var1.value==1:
            i=i+2
            print var2.value+2,var4.value,var5.value
            mylist.append(time.time())
    except IOError as e:
        if e.errno==errno.EPIPE:
            var3.value=var3.value+1
            print "Error"
def work():
    for i in range(var3.value):
        print i,var6,var7,va8,var9,var10
        p=multiprocessing.Process(target=func,args=(var1,var2,var4,var5,mylist))
        p.start()
work()

当我运行此代码,有时它完美的作品,有时它不为循环计数的精确量运行,有时我得到以下错误:

0
1
Process Process-2:
Traceback (most recent call last):
  File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap
    self.run()
  File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
  File "dummy.py", line 19, in func
    if var1.value==0:
  File "/usr/lib64/python2.6/multiprocessing/managers.py", line 1005, in get
    return self._callmethod('get')
  File "/usr/lib64/python2.6/multiprocessing/managers.py", line 722, in _callmethod
    self._connect()
  File "/usr/lib64/python2.6/multiprocessing/managers.py", line 709, in _connect
    conn = self._Client(self._token.address, authkey=self._authkey)
  File "/usr/lib64/python2.6/multiprocessing/connection.py", line 149, in Client
    answer_challenge(c, authkey)
  File "/usr/lib64/python2.6/multiprocessing/connection.py", line 383, in answer_challenge
    message = connection.recv_bytes(256)         # reject large message
EOFError

这个错误是什么意思? 有什么错我在这里干什么? 这是什么错误指示? 请指引我正确的路径。 我使用的CentOS 6.5

Answer 1:

在多重共享变量的使用是棘手的。 由于蟒蛇全局解释器锁(GIL)的,多是不能直接在Python。 当您使用multiprocessing模块,可以启动不同的过程中的几个任务,但你不能共享内存。 在你的情况下,你需要这个,所以你尝试使用共享内存。 但是,这里所发生的是,你有几个程序试图读取在同一时间同一内存。 为了避免内存损坏,进程锁定当前正在读取的存储器地址,禁止其它进程,直到它读完访问它。 在这里,你有3个进程试图评估var1.value第一if你的循环func :第一进程读取的值,而其他被堵塞,引发错误。 为了避免这种情况的机制,你应该始终管理Lock您的共享变量自己。 您可以尝试的语法:

var1=multiprocessing.Value('i',0) # create shared variable
var1.acquire() # get the lock : it will wait until lock is available
var1.value # read the value
var1.release() # release the lock

外部文档:

锁: https://docs.python.org/2/librar/multiprocessing.html#synchronization-between-processes GIL: https://docs.python.org/2/glossary.html#term-global-interpreter-lock



文章来源: Error in Python multiprocessing process