免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2917 | 回复: 4
打印 上一主题 下一主题

请教一个python中Queue的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-07-07 16:36 |只看该作者 |倒序浏览
本帖最后由 swenker 于 2016-07-08 13:39 编辑

请大家帮忙看看是什么问题,谢谢

场景如下:

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("%d the queue is empty. will sleep 1 minute:%d..." %(id(job_queue),job_queue.qsize()))
            time.sleep(20)



worker_thread = threading.Thread(target=handle_photos)
worker_thread.setDaemon(True)
worker_thread.start()


在webadmin.py中,会接受http请求,出发submit_job, 测试发现 如果是基于web环境来测试, 现成总是认为job_queue是空的,而submit_job中的qzine确实在不断的增加的。
这是怎么回事呢?

而且如果如果用下面的单元测试代码来测试,线程能正确的获取queue的状态。
class RequestSenderThread(threading.Thread):


    def __init__(self,order_id,relative_folder,group=None, target=None, name=None, args=(), kwargs=None, verbose=None):
        super(RequestSenderThread, self).__init__(group, target, name, args, kwargs, verbose)


    def run(self):
        i = 0
        while(i<3):
            pj = PhotoJob(int('11'+str(i)),'/20',1)
            submit_job(pj)
            i+=1
            time.sleep(10)

class TestBatchImageHandler(unittest.TestCase):
    def test_send_handle_order_photo(self):
        rst = RequestSenderThread(11,'/2011/12/13')
        rst.start()
        print
        print "sender started."



论坛徽章:
0
2 [报告]
发表于 2016-07-08 19:45 |只看该作者
整个consumer和producer在不同的进程吧?

论坛徽章:
0
3 [报告]
发表于 2016-07-09 00:51 |只看该作者
回复 2# killnbboy


    这个怎么来验证呢?
    我曾试着输出了job_queue的id , id(job_queue)的值在程序运行期间,producer和consumer引用的都是一样的呀。

论坛徽章:
0
4 [报告]
发表于 2016-07-09 00:53 |只看该作者
回复 2# killnbboy


    而且后来我还试过无论是producer还是consumer用的job_queue都是由web层定义,作为参数传入producer和consumer,竟然也不行,真是迷惑之至。

论坛徽章:
0
5 [报告]
发表于 2016-07-19 09:26 来自手机 |只看该作者
这个确实是新起的线程和主线程不在一个进程引起的,我用的uwsgi和web.py感觉是uwsgi的机制导致的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP