问题一:描述
当同时使用gevent和multiprocessing时,会带来一些冲突,比如以下代码,运行后会报错 ValueError: semaphore or lock released too many times。
from gevent import monkey;monkey.patch_all()
import time
from multiprocessing import Process, Queue
def test(que: Queue):
while True:
if que.empty():
print('sleep')
time.sleep(3)
continue
print(que.get())
def main():
que = Queue()
que.put([1, {1: 2}])
process = Process(target=test, args=(que,))
process.start()
return "OK"
main()
问题一:解决办法
一、使用gipc库解决冲突问题。
二、放弃gevent,使用asynico模块实现协程,或使用threading、concurrent等线程库替代协程。
问题二
在linux中使用subprocess模块时,需要注意以下几点:
1)启动时必须使用列表参数:
exe = subprocess.Popen(['ps', '-l'])
2)结束进程后需wait回收进程资源:
exe.kill()
exe.wait()