此代碼執行在Linux上,但拋出一個AttributeError:類型的對象「T」對窗戶沒有屬性「VAL」,爲什麼呢?Python的多Linux窗口差異
from multiprocessing import Process
import sys
class T():
@classmethod
def init(cls, val):
cls.val = val
def f():
print(T.val)
if __name__ == '__main__':
T.init(5)
f()
p = Process(target=f, args=())
p.start()
'fork' vs'spawn'是一個很老的辯論。 NT內核一直有能力進行寫入時複製分支,但是從MS-DOS出來的Windows API本身不允許它。另外,在分叉多進程的過程中還存在一些不小的問題,在這種情況下,除了「fork」:「forkserver」和「spawn」之外,Python 3.4還爲您提供了兩個啓動選項。後者是Windows上唯一的選擇。 – eryksun
確實如此。儘管NT內核中存在底層功能,但我始終發現在Win32中可以使用奇怪的無叉系統調用。我不禁要看到它,因爲微軟不願意屈服於舊的*「那些不懂Unix的人被指責重塑它」*說。哎呀,他們等到W2k8才加入符號鏈接。我準備好打賭,在未來的某些Windows版本中將會出現'fork()'等效,只是給他們一些時間。可能帶有一個名稱,如'DuplicateCurrentProcess'。 – spectras
我的意思是不允許它是系統從在DOS上運行的Windows 2.0進化而來的方式,不會與'fork'一起工作 - 至少不會用於活動進程。內核模式Windows(win32k.sys)擴展了NT'EPROCESS'和'ETHREAD'結構,使'fork'可能會出現問題,比如死鎖。 OTOH,爲了分析一個過程,我們確實有能力發出惰性[快照](https://msdn.microsoft.com/en-us/library/dn457825)。 – eryksun