我正在尝试运行 Flask 服务器和同时向其发出请求的客户端。
当我运行以下代码时:
def main():
"""
Start a local server and call it
using parallel processes.
"""
pid = os.fork()
if pid == 0:
# GET data
get()
return 0
else:
# Run the server
run()
return 0
if __name__ == "__main__":
main()
使用cmd:
python main.py <SOME_ARGS>
我得到以下输出:
* Serving Flask app 'server.server' < ---- Server Starts running
* Debug mode: on
Traceback (most recent call last): < ---- Client runs, Error Traceback
.
.
.
requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=3000): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x100919640>: Failed to establish a new connection: [Errno 61] Connection refused'))
* Running on http://127.0.0.1:3000. < ---- Server finishes running
Hello, World! < ---- Client runs again, this time successfully
问题是我希望父进程运行一次,但它似乎运行了两次。
使用线程:您可以使用线程来并行运行 Flask 服务器和客户端,而不是 fork。
import threading
from flask import Flask
import requests
import time
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
def run():
app.run(port=3000)
def get():
time.sleep(1)
response = requests.get('http://127.0.0.1:3000')
print(response.text)
def main():
server_thread = threading.Thread(target=run)
server_thread.start()
get()
if __name__ == "__main__":
main()