Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 监视另一个进程(svn)_Python_Svn_Multiprocessing - Fatal编程技术网

Python 监视另一个进程(svn)

Python 监视另一个进程(svn),python,svn,multiprocessing,Python,Svn,Multiprocessing,我有一个python脚本,可以从一系列存储库下载源代码,其中一些存储库很大 有时候,SVN挂在支票的中间。有没有办法监视svn进程,让我知道它是否挂起?您可以使用,并为每个“事件”进程注册回调。PySVN还可以轮询“取消”回调。第一次回调可以启动计时器,如果计时器过期,您可以告诉“cancel”回调返回False,从而取消签出 #!/usr/bin/python url = "svn://server/path/to/repo" path = "/path/to/local/wc" impo

我有一个python脚本,可以从一系列存储库下载源代码,其中一些存储库很大

有时候,SVN挂在支票的中间。有没有办法监视svn进程,让我知道它是否挂起?

您可以使用,并为每个“事件”进程注册回调。PySVN还可以轮询“取消”回调。第一次回调可以启动计时器,如果计时器过期,您可以告诉“cancel”回调返回False,从而取消签出

#!/usr/bin/python

url = "svn://server/path/to/repo"
path = "/path/to/local/wc"

import pysvn
import threading

# Set to something reasonable
SVN_TIMEOUT = 1000

svn_timer = None
stop_svn = False

def timer_expired():
    # Too long since last SVN event, so do something sensible...
    print "SVN took too long!"
    global stop_svn
    stop_svn = True

def svn_cancel():
    return stop_svn

def notify( event_dict ):
    global svn_timer
    if svn_timer:
        svn_timer.cancel()
    svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
    svn_timer.start()

svn_client = pysvn.Client()
svn_client.callback_notify = notify
svn_client.callback_cancel = svn_cancel

svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
svn_timer.start()

revision = svn_client.checkout(url,path)

if svn_timer:
    svn_timer.cancel()
您可以使用,并为每个“事件”进程注册回调。PySVN还可以轮询“取消”回调。第一次回调可以启动计时器,如果计时器过期,您可以告诉“cancel”回调返回False,从而取消签出

#!/usr/bin/python

url = "svn://server/path/to/repo"
path = "/path/to/local/wc"

import pysvn
import threading

# Set to something reasonable
SVN_TIMEOUT = 1000

svn_timer = None
stop_svn = False

def timer_expired():
    # Too long since last SVN event, so do something sensible...
    print "SVN took too long!"
    global stop_svn
    stop_svn = True

def svn_cancel():
    return stop_svn

def notify( event_dict ):
    global svn_timer
    if svn_timer:
        svn_timer.cancel()
    svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
    svn_timer.start()

svn_client = pysvn.Client()
svn_client.callback_notify = notify
svn_client.callback_cancel = svn_cancel

svn_timer = threading.Timer(SVN_TIMEOUT, timer_expired)
svn_timer.start()

revision = svn_client.checkout(url,path)

if svn_timer:
    svn_timer.cancel()

您可以继续轮询svn进程的标准输出,并测试获得新文件的频率。如果在x秒内没有获得新文件,请跳转进程


从主脚本中使用子进程启动svn,并在等待进程完成时轮询标准输出。

您可以继续轮询svn进程的标准输出,并测试获得新文件的频率。如果在x秒内没有获得新文件,请跳转进程


从主脚本中使用子进程启动svn,并在等待进程完成时轮询stdout。

我不完全确定svn是否喜欢一次更新太多(不过我只是猜测)。您正在运行这些异步的吗?你能同步运行它们吗?换言之,我正在一个接一个地运行它们同步。Purui:嗯。你是在使用SVN库还是直接调用SVN.exe?你可以使用一个库,用这种方式钩住每个文件,并观察进度,但这需要做一点工作(嗯,不多,但比你目前正在做的更多)。我不完全确定SVN是否喜欢一次更新太多(不过我只是猜测)。您正在运行这些异步的吗?你能同步运行它们吗?换言之,我正在一个接一个地运行它们同步。Purui:嗯。你是在使用SVN库还是直接调用SVN.exe?你可以使用一个lib,用这种方式钩住每个文件,并观察进度,但这需要做一点工作(嗯,不多,但比你目前正在做的要多)。好吧,也许PySVN不能像我记得的那样工作,因为我实际上无法让它触发超时…Duh,我忘了启动计时器。你也可以打印事件日志中的内容以进行调试/详细输出。好吧,也许PySVN在我记忆中不起作用,因为我实际上无法让它触发超时…嗯,我忘了启动计时器。你也可以打印事件日志中的内容以进行调试/详细输出。