因为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