我正在尝试使用多处理库编写一个基本的python脚本。我们的目标是有一个while循环,直到键盘中断为止。在while循环期间,它将请求一个将被输入的命令。根据此命令,它将创建一个运行特定函数的进程,然后将其存储在进程队列中。在每个while循环结束时,它将从进程队列中获取第一个队列并运行它。我希望线程安全,因为只有一个进程将运行,但我很难弄清楚如何实现这一点使用锁实用程序提供的多处理。我已经附上我的代码如下,任何帮助都非常感谢。目前,一个进程将运行是安全的,但是如果队列增加超过1,它将根本不会运行。你知道吗
import multiprocessing
from multiprocessing import Process, Queue
import numpy as np
l = multiprocessing.Lock()
semaphore = 0
processHold = 0
def proc1():
global l
global semaphore
global processHold
matrix_inverse()
print 'proc1 done'
return
def proc2():
global l
global semaphore
global processHold
print 'proc2 done'
return
def matrix_inverse():
global l
global semaphore
global processHold
M = np.random.rand(2500,2500)
Minv = np.linalg.inv(M)
def main():
global l
global semaphore
global processHold
processQueue = multiprocessing.Queue()
while(True):
cmd = raw_input('Enter proc1 or proc2')
if cmd == 'proc1':
name = 'myProc1'
processQueue.put(name)
elif cmd =='proc2':
name = 'myProc2'
processQueue.put(name)
else:
print 'invalid command'
if processHold==1:
print 'enter here'
if p.is_alive==True:
processHold==1
print 'process is still alive, set processHold'
processHold==0
print 'stuck in processHold'
print 'processhold '+str(processHold)
print 'qsize '+str(processQueue.qsize())
if (processQueue.qsize()>0)&(processHold==0):
if semaphore>0:
l.release()
semaphore=semaphore-1
print 'stuck in semaphore'
print 'semaphore '+str(semaphore)
currentProcess = processQueue.get()
if currentProcess=='myProc1':
l.acquire(block=True, timeout=None)
semaphore=semaphore+1
p = Process(name=currentProcess,target=proc1)
processHold=processHold+1
print 'stuck in myProc1'
elif currentProcess=='myProc2':
l.acquire(block=True, timeout=None)
semaphore=semaphore+1
p = Process(name=currentProcess,target=proc2)
processHold=processHold+1
print 'stuck in myProc2'
p.start()
elif (processQueue.qsize()>0)&(processHold==1):
print 'Current process running: '+str(currentProcess)+' with '+str(processQueue.qsize())+' processes waiting'
else:
print 'no current processes'
if __name__ == '__main__':
main()
目前没有回答
相关问题 更多 >
编程相关推荐