Python与调度计算
我希望在当前Python计算完成后安排一次计算。注意,我的Python解释器是通过emacs运行的 例如,我当前正在运行:Python与调度计算,python,emacs,scheduled-tasks,interpreter,Python,Emacs,Scheduled Tasks,Interpreter,我希望在当前Python计算完成后安排一次计算。注意,我的Python解释器是通过emacs运行的 例如,我当前正在运行: >>> for i in range(2, 5): ... tn.TweetNetwork.create_subnetworks(i) ... 我犯了一个简单的错误,打算键入范围(1,5)。这已经运行了至少4个小时,应该再运行几个小时。也就是说,我不想用修正重新执行循环,并丢失所有已计算的内容 由于我不是全天候被计算机控制,我如何安排Pytho
>>> for i in range(2, 5):
... tn.TweetNetwork.create_subnetworks(i)
...
我犯了一个简单的错误,打算键入范围(1,5)
。这已经运行了至少4个小时,应该再运行几个小时。也就是说,我不想用修正重新执行循环,并丢失所有已计算的内容
由于我不是全天候被计算机控制,我如何安排Python执行函数`tn.TweetNetwork.create_子网(1)
我使用Emacs24.3和Ubuntu12.04LTS,如果您需要更多信息,请告诉我。非常感谢您的帮助
编辑:我喜欢贴出的答案,但是我不知道如何找到PID。我正在通过emacs运行Python解释器。那么我该如何找到答案呢?我认为,最简单的方法是编写另一个脚本,等待进程完成并运行
tn.TweetNetwork。创建子网络(1)
。只有当您的create_子网络
不访问任何全局变量,并将所有结果写入数据库/文件/等时,此操作才有效
# Write script similar to these
import os, time
print "Wait until old script completed..."
while os.path.exists("/proc/SCRIPT_PID"):
time.sleep(1)
print "Execute create_subnetworks..."
tn = ...
tn.TweetNetwork.create_subnetworks(1)
通过SSH连接到您的计算机,通过
ps axu | grep script_name
获取进程id并运行此新脚本。我认为,最简单的方法是编写另一个脚本,等待进程完成并运行tn.TweetNetwork。创建子网络(1)
。只有当您的create_子网络
不访问任何全局变量,并将所有结果写入数据库/文件/等时,此操作才有效
# Write script similar to these
import os, time
print "Wait until old script completed..."
while os.path.exists("/proc/SCRIPT_PID"):
time.sleep(1)
print "Execute create_subnetworks..."
tn = ...
tn.TweetNetwork.create_subnetworks(1)
通过SSH连接到您的计算机,通过
ps-axu | grep-script_-name
获取进程id并运行此新脚本。这对评论来说太多了,但这不是一个完整的回复
要获取由Emacs启动的流程,请执行以下操作:
(进程id(获取进程“进程名称”)
李>
但这将为您提供解释器的过程,而不是从解释器开始的任何其他过程
如果需要通过该流程生成所有流程,可以执行以下操作:
$ pstree PID
其中
PID
是您之前从Emacs获得的信息。这对于评论来说太多了,但这不是一个完整的回复
要获取由Emacs启动的流程,请执行以下操作:
(进程id(获取进程“进程名称”)
李>
但这将为您提供解释器的过程,而不是从解释器开始的任何其他过程
如果需要通过该流程生成所有流程,可以执行以下操作:
$ pstree PID
其中
PID
是您先前从Emacs获得的代码。如果Tyler comment没有帮助,您可以评估以下代码:
(defun foo (ignored)
(remove-hook 'comint-output-filter-functions 'foo)
(run-with-timer 1 nil (lambda()
(goto-char (point-max))
(insert "tn.TweetNetwork.create_subnetworks(1)")
(comint-send-input))))
(add-hook 'comint-output-filter-functions 'foo)
它定义了一个函数,该函数将在调用该函数后的第二秒(延迟用于避免递归循环)插入需要插入到python低级缓冲区中的命令
然后,它在低级进程(在您的例子中是python)写入任何内容的事件上设置该函数的调用。在您的例子中,这将是“>>>”提示符,python在准备就绪时编写该提示符。如果您的代码正在生成输出,那么这种方法将不起作用
如果在其他缓冲区(shell、sql等)中使用comint,则需要将变量
comint输出筛选函数
设置为python交互式缓冲区的本地(使用将变量缓冲区设置为本地
)如果Tyler comment没有帮助,则可以评估以下代码:
(defun foo (ignored)
(remove-hook 'comint-output-filter-functions 'foo)
(run-with-timer 1 nil (lambda()
(goto-char (point-max))
(insert "tn.TweetNetwork.create_subnetworks(1)")
(comint-send-input))))
(add-hook 'comint-output-filter-functions 'foo)
它定义了一个函数,该函数将在调用该函数后的第二秒(延迟用于避免递归循环)插入需要插入到python低级缓冲区中的命令
然后,它在低级进程(在您的例子中是python)写入任何内容的事件上设置该函数的调用。在您的例子中,这将是“>>>”提示符,python在准备就绪时编写该提示符。如果您的代码正在生成输出,那么这种方法将不起作用
如果您在其他缓冲区(shell、sql等)中使用comint,则需要将变量
comint输出筛选函数
设置为python交互式缓冲区的本地(使用将变量缓冲区设置为本地
)通过trampC-x C-f/ssh访问您的服务器:user@server:/
,启动M-x eshell
并执行ps-axo-pid,command | grep running_-script_-name
。我不确定是否有running_-script_-name
意味着我导入了一个模块,然后从解释器运行模块中的函数。通过trampC-x C-f/ssh访问您的服务器:user@server:/
,启动M-x eshell
并执行ps-axo-pid,command | grep running_-script_-name
。我不确定我是否有一个running_-script_-name
意味着我导入了一个模块,然后从解释器中运行模块中的函数。你真的需要安排下一个Python命令吗,或者在当前命令完成后立即运行它?在后一种情况下,只需在Python缓冲区中键入命令并按enter键。它将在完成当前命令后立即发送到Python。或者至少,这就是Emacs在shell或R终端缓冲区中的工作方式。如果您使用的是bash shell或基于comint模式的Python模式,它的工作方式应该是相同的。可能是一种完全不同的方法:如果您正在运行的任务给您的cpu带来了很大的负载,请找出这一点(如使用top命令),一旦加载时间足够长,就开始另一个任务:)您真的需要安排下一个Python命令,还是在当前命令完成后立即运行它?在后一种情况下,只需在Python缓冲区中键入命令并按enter键。它将在完成当前命令后立即发送到Python。或者至少,