[英]RuntimeError on Windows trying to run a simple program
我有這個簡單的程序:
from PIL import Image
import pyscreenshot as ImageGrab
print "hi"
im=ImageGrab.grab()
im.show()
這在Ubuntu上可以很好地工作,但是在Windows上會出現以下錯誤:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python27\lib\multiprocessing\forking.py", line 380, in main
prepare(preparation_data)
File "C:\Python27\lib\multiprocessing\forking.py", line 509, in prepare
'__parents_main__', file, path_name, etc
File "C:\Users\Administrator\Downloads\sample.py", line 5, in <module>
im=ImageGrab.grab()
File "C:\Python27\lib\site-packages\pyscreenshot\__init__.py", line 46, in gra
b
return _grab(to_file=False, childprocess=childprocess, backend=backend, bbox
=bbox)
File "C:\Python27\lib\site-packages\pyscreenshot\__init__.py", line 29, in _gr
ab
return run_in_childprocess(_grab_simple, imcodec.codec, to_file, backend, bb
ox, filename)
File "C:\Python27\lib\site-packages\pyscreenshot\procutil.py", line 28, in run
_in_childprocess
p.start()
File "C:\Python27\lib\multiprocessing\process.py", line 130, in start
self._popen = Popen(self)
File "C:\Python27\lib\multiprocessing\forking.py", line 258, in __init__
cmd = get_command_line() + [rhandle]
File "C:\Python27\lib\multiprocessing\forking.py", line 358, in get_command_li
ne
is not going to be frozen to produce a Windows executable.''')
RuntimeError:
Attempt to start a new process before the current process
has finished its bootstrapping phase.
This probably means that you are on Windows and you have
forgotten to use the proper idiom in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce a Windows executable.
沒有多重處理。 我看到了其他答案,但它們沒有幫助。
有人可以在這里建議一個可能的問題嗎?
追溯表明在后台使用了multiprocessing
,而不是在您自己的代碼中顯式使用。 具體來說,它是由pyscreenshot\\procutil.py
。 追溯的相關行:
File "C:\Python27\lib\site-packages\pyscreenshot\procutil.py", line 28, in run
_in_childprocess
p.start()
File "C:\Python27\lib\multiprocessing\process.py", line 130, in start
self._popen = Popen(self)
由於問題出在庫中,因此您只能自行修改庫,否則您將無能為力。 但是, 此頁面說pyscreenshot
是“ ImageGrab模塊的替換,僅在Windows上有效”。 因此,您應該安裝ImageGrab
庫,該庫似乎功能完全相同,但僅與Windows和MacOS兼容(請參閱此處 )
Windows上的多處理模塊存在一個已知問題(詳細說明roganosh備注):使用multiprocessing
模塊必須在函數或__main__
節中完成(在所有導入初始化之后),而不是在腳本的根目錄中,因為Windows生成python可執行文件的方式(因此出現“引導階段”錯誤)。 在Linux上沒有問題。 看起來很像Windows上嘗試python multiprocessing的RuntimeError相同的問題。
嘗試更改為以下代碼:
from PIL import Image
import pyscreenshot as ImageGrab
if __name__ == "__main__":
im=ImageGrab.grab()
im.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.