现在的位置: 首页 > 综合 > 正文

python多进程

2017年07月12日 ⁄ 综合 ⁄ 共 580字 ⁄ 字号 评论关闭

因为python的线程是假线程,所有的线程都是共用一个CPU的,为了避免这个问题,所以需要用到多进程,multiprocessing

关于multiprocessing的用法也比较简单

worker = multiprocessing.Process(target=workFunc, args=('a', 'b'))

worker.start()

# 阻塞1s执行下步,不输入参数就一直阻塞等进程结束
worker.join(1)

然后需要用到共享资源,出现了一系列的问题,后来终于查到是multiprocessing.Queue的问题,就是这个队列用来判断empty的函数在里面有东西的时候,有时候居然会返回true,后来查到这个Queue里面自带semaphore,就去掉了自己在外层添加的信号量,然后直接不判空,就直接Queue.get()就好,里面自带信号量是会阻塞的,然后又查到可以设置timeout的,然后直接用Queue.get(true, 0.1),意思是0.1秒之后会抛出一个异常,我只要收到这个异常然后返回None就行了

def getMsg(block = true, timeout=None):
  try:
    result = inQueue.get(block, timeout)
  except:
    result = None
  return result

这样就简单解决了多线程共享资源的问题了

抱歉!评论已关闭.