如何在“后台”中运行脚本的一部分(单个函数)? - python

我在具有以下基本结构(伪代码)的服务器上运行python脚本:

for data_item in data_items:
    processed_result=process_data(data_item); #this takes time T0
    upload_result_to_site(processed_result) #this takes time T1

基本限制是:

data_items是(大)数据列表
process_data()使用很多cpu。
upload_result_to_site()占用的CPU很少。
T0 = 5*T1(大约)

现在,我的服务器时间有限,我想将其全部用于CPU密集型process_data()而不是upload_result()上。不幸
upload_result_to_site()是必需的。

一种解决方案是运行:

upload_result_to_site(processed_result)

在“后台”中的运行方式与在UNIX上在后台运行进程的方式相同。

我可以在后台运行整个脚本(通过os.popen3subprocess),也可以使用守护程序。但是我想要最简单的解决方案。我找不到使用子进程仅调用脚本一部分(单个函数)的方法

可以使用multiprocessing.Pool.map(),但是它创建的进程必须在某个时候加入和终止,否则子进程的数量将不断增长。

有没有简单的方法可以做到这一点?

更新:当前,我正在使用以下解决方法:

for data_item in data_items:
    processed_result=process_data(data_item); #this takes time T0
    os.system("myscript.py upload_result_to_site processed_result &")

其中myscript.py是脚本的名称,并且__name__==__main__中存在适当的处理程序。
(理论上的)缺点是这可能仅适用于Unix。由于我的服务器运行的是Unix,这对我来说很好。如果有人有更好的解决方案,请回答。

参考方案

真正长期的简单解决方案是为自己创建所需的基本构建块。您的脚本正在做两个非常不同的事情。

“自然”的解决方案是将您的脚本变成一个模块,该模块仅提供不同的服务。

然后,您可以编写一个或多个导入该模块的脚本,然后可以使用popen3 / subprocess来简单地调用一个仅上传单个结果的小脚本。

如何在Linux上安装2个Anacondas(Python 2.7和3.5)? - python

我想使用Python 2和3版本。我已经读过有关conda环境的用法,但是不断向终端source (de)activate py27写入内容似乎不方便。如picture所示,如何使用命令选择内核版本? 参考方案 您在该图像中寻找的是Jupyter Notebook。您需要使用Jupyter和所需的python版本创建环境:conda create -n py…

为什么在Python中根据@staticmethod选择模块级别的函数(根据Google样式指南)? - python

根据《 Google Python样式指南》,绝对不应(几乎)使用静态方法: 除非为了与 在现有库中定义的API。编写模块级功能 代替该建议背后的原因是什么?这是否仅适用于Google?还是在Python中使用静态方法还有其他(更一般的)缺点?尤其是,如果我想在将由该类的其他公共成员函数调用的类中实现实用程序功能,则最佳实践是什么?class Foo: ..…

mkvirtualenv命令是什么意思?是Linux命令还是python命令..? [关闭] - python

Closed. This question is off-topic。它当前不接受答案。                                                                                                                                        …

如何访问页面内的第三方跟踪参数(通过Python)? - python

我已经搜索了很多,到目前为止,还无法确定如何访问页面中的第三方跟踪参数。使用下面的代码,我可以通过python request软件包访问页面的cookie,但是仅对于本地域,不会返回任何第三方的cookie /域:import requests # create session s = requests.session() # read data from …

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…