我如何在云环境中同时处理 运行 两个 python 脚本?
How would I go about running two python scripts at the same time in a cloud env?
我在一个文件中有一个 python 服务器,需要从另一个 python 文件获取 var。问题是,我需要它们在云环境中同时 运行。我需要启动第二个,以便它可以通过 API 获取一些数据,然后将其存储在 var 中。然后服务器需要启动,以便它可以启动、获取数据并将其传递给前端。我认为我的语法没问题,但我可以这样做吗?我在本地都尝试了 运行,但一无所获。我可以在云端执行此操作吗?
示例代码
文件b
import requests
response = ''
def get_data():
global q
url = 'apiURL'
headers = {}
response = requests.request('GET', url, data='payload', headers=headers)
q.put(response)
文件一个
from threading import Thread
import helper
import queue
q = queue.Queue()
def start_helper():
thread_process = Thread(target=helper.get_data)
thread_process.start()
def get_results():
global q
result = q.get()
return result
start_helper()
print("helper started")
result = get_results()
print("got results")
print(result)
print("ok")
我想您正在寻找的是线程。线程启用并行 processing/execution。假设您有两个 python 文件,a.py
和 b.py
,第三个文件包含您的全局变量,名为 globals.py
.
a.py
需要从 b.py
中进行的 api 调用中获取数据。您可以通过在 b.py
中声明调用 api 的函数来实现此目的,并在 a.py
中的线程中声明 运行 它
这是你的示例 globals.py
文件:
import queue
q = queue.Queue()
这是 b.py
文件中的示例代码:
from globals import q
#lots of Python stuff
#function to be called in thread
def my_api_call():
#some api call made and result stored in a variable named 'result'
global q
q.put(result)
#lots of other Python stuff
这是 a.py
文件中的示例代码:
from threading import Thread
from globals import q
import b
def start_api_call_in_b():
thread_process = Thread(target=b.my_api_call)
thread_process.start()
def get_api_result_from_b():
result = q.get()
return result
start_api_call_in_b()
"""
.
.
.
do lots of other stuff
.
.
.
"""
result = get_api_result_from_b()
print(result)
这将导致 a.py
对 b.py
的函数进行线程调用并在全局队列中接收它的结果。当你想接收结果时,只需调用函数从队列中获取接收到的数据即可。
另请记住,在 b.py
内的函数之外编写的任何代码都将在导入时立即执行。
我在一个文件中有一个 python 服务器,需要从另一个 python 文件获取 var。问题是,我需要它们在云环境中同时 运行。我需要启动第二个,以便它可以通过 API 获取一些数据,然后将其存储在 var 中。然后服务器需要启动,以便它可以启动、获取数据并将其传递给前端。我认为我的语法没问题,但我可以这样做吗?我在本地都尝试了 运行,但一无所获。我可以在云端执行此操作吗?
示例代码
文件b
import requests
response = ''
def get_data():
global q
url = 'apiURL'
headers = {}
response = requests.request('GET', url, data='payload', headers=headers)
q.put(response)
文件一个
from threading import Thread
import helper
import queue
q = queue.Queue()
def start_helper():
thread_process = Thread(target=helper.get_data)
thread_process.start()
def get_results():
global q
result = q.get()
return result
start_helper()
print("helper started")
result = get_results()
print("got results")
print(result)
print("ok")
我想您正在寻找的是线程。线程启用并行 processing/execution。假设您有两个 python 文件,a.py
和 b.py
,第三个文件包含您的全局变量,名为 globals.py
.
a.py
需要从 b.py
中进行的 api 调用中获取数据。您可以通过在 b.py
中声明调用 api 的函数来实现此目的,并在 a.py
这是你的示例 globals.py
文件:
import queue
q = queue.Queue()
这是 b.py
文件中的示例代码:
from globals import q
#lots of Python stuff
#function to be called in thread
def my_api_call():
#some api call made and result stored in a variable named 'result'
global q
q.put(result)
#lots of other Python stuff
这是 a.py
文件中的示例代码:
from threading import Thread
from globals import q
import b
def start_api_call_in_b():
thread_process = Thread(target=b.my_api_call)
thread_process.start()
def get_api_result_from_b():
result = q.get()
return result
start_api_call_in_b()
"""
.
.
.
do lots of other stuff
.
.
.
"""
result = get_api_result_from_b()
print(result)
这将导致 a.py
对 b.py
的函数进行线程调用并在全局队列中接收它的结果。当你想接收结果时,只需调用函数从队列中获取接收到的数据即可。
另请记住,在 b.py
内的函数之外编写的任何代码都将在导入时立即执行。