0
スレッドまたはパラレルプロセスでローカライズされたWebサーバーを実行し、同じPythonプログラムでそのWebサーバーからurlを照会できるようにしたいと考えています。私はhtml自己動機付けスライドを構築していて、qtを使ってそれらをWebブラウザに表示します。他のコードと並行してPython Webサーバーを実行する
Webサーバーは、ローカルで、非常に少ないボリュームでしか照会されません。
スレッド処理を使用して、このプログラムでマルチプロセッシングを使用しようとしました。私は両方から同様のスタックトレースを取得します。
私の質問: Webサーバーを起動しても、Webサーバーの起動後に実行されるコードをブロックする方法はありますか?
import http.server
import socketserver
import os
from multiprocessing import Process
import time
def run_webserver():
cwd = os.getcwd()
os.chdir("./www/public")
PORT = 8002
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("serving at port", PORT)
return httpd
if __name__ == '__main__':
httpd = run_webserver()
p = Process(target=httpd.serve_forever, args=())
p.start()
p.join()
# do other work
for i in range(200):
print(str(i))
time.sleep(500)
serving at port 8002
Process Process-1:
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/ process.py", line 249, in _bootstrap
self.run()
File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/multiprocessing/ process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/socketserver.py", line 233, in serve_forever
selector.register(self, selectors.EVENT_READ)
File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/selectors.py", line 351, in register
key = super().register(fileobj, events, data)
File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/selectors.py", line 237, in register
key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data)
File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/selectors.py", line 224, in _fileobj_lookup
return _fileobj_to_fd(fileobj)
File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/selectors.py", line 41, in _fileobj_to_fd
raise ValueError("Invalid file descriptor: {}".format(fd))
ValueError: Invalid file descriptor: -1
['multiprocessing'](https://stackoverflow.com/a/20549090/1362294)モジュールを使用してみましたか? – darksky