我想獲得一些代碼工作,我可以使用gevent實現登錄到多線程程序。我想要做的是設置自定義日誌記錄處理程序,以將日誌事件放入隊列中,而偵聽器進程則持續監視新的日誌事件以進行適當處理。我在過去使用Multiprocessing完成了這個任務,但從未使用過Gevent。Python Gevent共享隊列(監聽器進程)
我在那裏的程序是在無限循環(監聽進程)被逮住的問題,而不是讓其他線程「做工作」 ......
理想的情況下,工作進程後完成後,我可以將任意值傳遞給偵聽器進程,告訴它打破循環,然後將所有進程連接在一起。這是我到目前爲止有:
import gevent
from gevent.pool import Pool
import Queue
import random
import time
def listener(q):
while True:
if not q.empty():
num = q.get()
print "The number is: %s" % num
if num <= 100:
print q.get()
# got passed 101, break out
else:
break
else:
continue
def worker(pid,q):
if pid == 0:
listener(q)
else:
gevent.sleep(random.randint(0,2)*0.001)
num = random.randint(1,100)
q.put(num)
def main():
q = Queue.Queue()
all_threads = []
all_threads = [gevent.spawn(worker, pid,q) for pid in xrange(10)]
gevent.wait(all_threads[1:])
q.put(101)
gevent.joinall(all_threads)
if __name__ == '__main__':
main()
正如我所說,該計劃似乎得到掛了後第一個過程,並且不允許其他工人做自己的事情。我也嘗試完全獨立地產生偵聽器進程本身(這實際上是我寧願這樣做),但這似乎並沒有工作,所以我嘗試了這種方式。
任何幫助將不勝感激,感覺就像我可能只是失去了一些明顯的gevent後端的東西。
感謝