首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程,JoinableQueue进程安全

进程,JoinableQueue进程安全
EN

Stack Overflow用户
提问于 2016-07-18 05:20:09
回答 1查看 15关注 0票数 0

最近,我开始用Python进行多进程处理。这段代码:

代码语言:javascript
复制
#!/usr/bin/env python
from Queue import Empty
from multiprocessing import Process, JoinableQueue

def _print():
    while True:
        try:
            p = q.get(True, 3)
        except Empty:
            return
        else:
            print "Got: " + p 
            q.task_done()
    return

def _generate():
    pw = bytearray(1);
    for pw[0] in range(ord('a'), ord('z') + 1):
        q.put(pw)
        print "Put: " + pw

if __name__ == '__main__':
    q = JoinableQueue()

    t = Process(target=_generate)
    t.start()

    t = Process(target=_print)
    t.start()

    q.join()

给出了以下输出:

代码语言:javascript
复制
Put: a
... # Correct order a-z and no duplicates
Put: z
Got: a
Got: b
Got: d
Got: d
... # Missing characters and duplicates
Got: z

根据这里的文档和其他线程,所以我无法找出上面代码中的进程安全问题在哪里。

我有一种感觉,我错过了一些微不足道的东西。有人能发现问题所在吗?有没有办法确保安全,即输出将正确地放入和获取每个字符,并且只有一次?

我在Windows上使用Python 2.7。

EN

回答 1

Stack Overflow用户

发布于 2016-07-18 06:19:10

通过使用itertools生成字符,解决了这个问题。这个问题似乎是由python对bytearray的处理引起的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38426031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档