【发布时间】:2016-07-17 00:24:34
【问题描述】:
有两个相关文件: backend_service.py 和 web_handler.py
在 backend_service.py 中
job_queue = Queue.Queue(5)
def submit_job(job):
job_queue.put(job)
logger.info("Enqueue new Job: JobID:%d,queue size:%d" %(job.order_id,job_queue.qsize()))
def handle_photos():
while True:
if not job_queue.empty():
job = job_queue.get_nowait()
logger.info("---------got job:%d" %job.order_id)
print "======================I am a task================"
job_queue.task_done()
else:
logger.info("the queue is empty. will sleep 20 seconds:%d..." %job_queue.qsize())
time.sleep(20)
worker_thread = threading.Thread(target=handle_photos)
worker_thread.setDaemon(True)
worker_thread.start()
在web_handler.py(基于web.py处理http请求的web app,web服务器为uwsgi)
def GET():
job = Job()
backend_service.submit_job(job)
将被调用并且job_queue.qsize 可以在submit_job 函数中返回正确的值。但是线程总是说队列是空的。
看起来线程在web服务状态下无法获取队列的正确状态。虽然我已经使用 unit test 测试了逻辑。它可以正常工作。 你能帮忙看看我哪里错了吗?
【问题讨论】:
-
传入 web_handler 命名空间的
job_queue对象在哪里? -
这里有一个很好的例子,调用线程时需要传递队列对象。 pymotw.com/2/Queue
-
@dodell , web_handler.py 只依赖 submit_job 函数。并且在函数 submit_job 本身中访问队列。
标签: python multithreading queue