import os
from multiprocessing import Process
b = {
'x':{
'd':[]
},
'y':{
'd':[]
},
}
def fmt():
global b
for k in b:
if not b[k]['d']:
b[k]['d'].append("fb1")
print b
t = Process(target=fb2, args=(k,))
t.daemon = False
t.start()
def fb2(k="x"):
print os.getpid(), k, b[k]
if __name__ == '__main__':
fmt()
Windows输出:
C:\Python27\python.exe C:/Users/qchen/PycharmProjects/syntax_test/syntax_test.py
{'y': {'d': ['fb1']}, 'x': {'d': []}}
{'y': {'d': ['fb1']}, 'x': {'d': ['fb1']}}
4412 y {'d': []}
5972 x {'d': []}
Linux 输出:
qchen@ubuntu:~/PycharmProjects/for_test$ python syntax_test.py
{'y': {'d': ['fb1']}, 'x': {'d': []}}
{'y': {'d': ['fb1']}, 'x': {'d': ['fb1']}}
23547 y {'d': ['fb1']}
23548 x {'d': ['fb1']}
我不知道为什么Windows操作系统和Linux操作系统之间会有差异;这种差异是由于两个操作系统中进程分叉和管理的不同所导致的。
b[k]
(尽管你的代码),而在Windows上你确实打印了b
(如代码所述)。由于使用的代码存在差异(至少这是最简单的解释),你可能搞砸了其他东西。我建议比较你在两个系统上运行的两个版本,消除所有差异,然后重试该实验。那么可能就没有这些奇怪的问题了。 - Alfeb = 1
(b
指向1
(整数对象)),import os as b
(b
指向os
模块),def b(): pass
(b
指向函数),class b: pass
(b
指向类)。请参阅 Naming and Binding。 - jfs