用 windows 写 Python 真的大丈夫?

2017-10-18 11:15:06 +08:00
 takanasi

经常遇到诡异的问题,换 ubuntu 就没事了。 比如说:

import multiprocessing, time, queue

# g_queue = queue.Queue()
g_queue = multiprocessing.Queue()
c = multiprocessing.cpu_count()

def init_queue():
    print("init g_queue start")

    while not g_queue.empty():
        g_queue.get()

    for _index in range(10):
        g_queue.put(_index)

    print("init g_queue end")
    
def task_io(task_id):
    print("IOTask[%s] start" % task_id)

    while not g_queue.empty():
        try:
            data = g_queue.get(block=True, timeout=1)
            print("IOTask[%s] get data: %s" % (task_id, data))
            time.sleep(1)
        except Exception as excep:
            print("IOTask[%s] error: %s" % (task_id, str(excep)))

    print("IOTask[%s] end" % task_id)
    
    
if __name__ == '__main__':
    print("cpu count:", multiprocessing.cpu_count(), "\n")
    print("========== 多进程执行 IO 密集型任务 ==========")
    init_queue()
    time_0 = time.time()
    process_list = [multiprocessing.Process(target=task_io, args=(i,)) for i in range(c)]

    for p in process_list:
        p.start()

    for p in process_list:
        if p.is_alive():
            p.join()

    print("结束:", time.time() - time_0, "\n")

完全拿不到 queue 里面的东西,直接当空气了。

9778 次点击
所在节点    Python
53 条回复
laqow
2017-10-18 13:04:08 +08:00
操作系统对 c 语言的限制在 python 上都有,不是 python 的锅
takanasi
2017-10-18 13:07:21 +08:00
@wwqgtxx
@Tuisku
我就是想问问 windows 和 linux 有什么常见的不同,正好有这么个例子而已。算了,反正已经歪了
NoAnyLove
2017-10-18 13:10:04 +08:00
@takanasi 不知道你想表达什么。如果你看网上一些讨论多进程的代码,很多是不能直接在 Windows 上运行的,比如 Windows 下需要额外的处理__main__和 freeze_support()。不过解决问题本身就是程序员的技能,如果刚好对系统知识有一定了解,有知道如何去代码中找答案,那么是不会产生这种疑问的,因为这并不是诡异的问题,而是系统限制,且有文档说明了这个问题。

https://stackoverflow.com/questions/8276933/python-multiprocessing-lock-issue
Patrick95
2017-10-18 13:12:10 +08:00
@takanasi #22 你这个帖子也不像是在问啊,妥妥的吐槽帖。
这是不对的。正帖里明明在吐槽,回帖中有人纠正就说别人在「装逼」。

人家有说错什么吗?就算人家不是解答给你的,也可以解答给那些对这个问题抱有疑惑的人啊。你「装逼」这个词注定了你不想好好讨论,还怪别人歪楼。
NoAnyLove
2017-10-18 13:12:20 +08:00
@takanasi 你这并不是问问题的态度,且主楼中看不到提问。我没看出来我的回答“装逼”在了哪里。
Lucius
2017-10-18 13:21:15 +08:00
@Tuisku #20

装逼的点在于你们的回复,打了 LZ 装逼的脸。
mentalkiller
2017-10-18 13:24:25 +08:00
感谢 LZ 丰富 block 列表
MushishiXian
2017-10-18 13:37:02 +08:00
你的标题压根不是在问问什么系统有什么常见的不同,如果是你的表达能力有问题的话,那也是你的问题,你怎么就觉得人家在装逼呢?
luozisha
2017-10-18 13:43:30 +08:00
平心而论,我觉得这个帖的 title 才是最装逼的。难道用 Linux 写 Python 就是大丈夫了吗?
860670496
2017-10-18 13:49:37 +08:00
造轮子也是要看路的啊
公路胎上雪地那不是大概率表演原地漂移
ytmsdy
2017-10-18 14:28:51 +08:00
用 windows 写了 3 年 python 的淡定路过。。
pycharm 下面写的溜溜的。
araraloren
2017-10-18 14:59:45 +08:00
@wwqgtxx 恩,想到了
不过只能限制在只读的情况下了,我想得有点复杂了
szetrov
2017-10-18 15:22:56 +08:00
大兄弟心气好高 2332 楼下的几位回复连“怼”都称不上,就是正常回复,结果被说成是装逼。呵呵了 2333
stanjia
2017-10-18 15:25:15 +08:00
@Tuisku 哈哈哈哈哈
geelaw
2017-10-18 15:27:38 +08:00
@takanasi #11 不懂,那我再问一下:为什么你会觉得 Windows 上的行为是“不正常的”?

@SuperMild #19 取决于文档,要求是表现和文档一致,而且这并不是一个语言的问题,而是一个语言的实现的问题。

@takanasi #22 这样提问的方式是不好的,首先你的例子不够简单,其次如果你认为这段代码应该在不同平台表现一致,那么这说明这段代码使用的 Python 的部分应该把这种不同抽象掉,而不是现在的情况,最后似乎也没人能解读出来你的帖子的意思,所以或许你说的和我们说的不是同一种语言。
sonyxperia
2017-10-18 15:59:15 +08:00
Java 在等着楼主
zgx030030
2017-10-18 16:01:42 +08:00
如果某段代码是在 win 上正常反而你放在 linux 下出错,你会起个“用 linux 写 python 真的大丈夫”的标题吗?如果不会且默默的把 Linux 下的错误改正,说明你可能有一种在 linux 下做开发的优越感。
matsuijurina
2017-10-18 16:12:57 +08:00
你不用开源库无所谓。python 好多机器学习的开源库作者根本没试过在 windows 下编译,一运行就出错。
takanasi
2017-10-18 16:13:10 +08:00
@zgx030030 我一个天天用装 windows 神船写程序的低逼格人士莫名其妙又变成有一种在 linux 下做开发的优越感了。
太冤了。
annielong
2017-10-18 17:09:23 +08:00
感觉 写代码真到这个地步的时候,大多都已经转 linux 了,而平常没用到这种地步的人,继续用 windows 也没啥问题,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398574

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX