有关服务器侦听器的Python问题

时间:2009-08-20 16:29:04

标签: python plugins multithreading teamcity sleep

我为jetbrains工具teamcity编写了一个插件。它几乎只是一个服务器监听器,它监听构建被触发并输出一些文本文件,其中包含有关不同构建的信息,例如触发它的内容,有多少更改等等。在我完成之后,我编写了一个可以输入的python脚本在服务器运行并启动构建时将信息转换为teamcity。我希望能够在构建运行后获取该构建的工件,但问题是我不知道每个构建运行需要多长时间。有时它是30秒,其他时间是30分钟。

所以我在python中使用这一行开始构建。

    urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')

构建运行后(一些不确定的时间)我想用这一行来获取我的文本文件。

urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')

问题是我不知道在执行第二行之前要等多久。通常在Java中,我会做第二个线程,它会休眠一段时间并等待构建完成。我不知道如何在python中执行此操作。因此,如果有人知道如何在python中执行此操作或更好的方法来做到这一点,我将不胜感激。如果我需要更好地解释自己,请告诉我。

格兰特 -

2 个答案:

答案 0 :(得分:2)

除非通过让构建服务器联系来获得通知,否则唯一的方法就是轮询。您可以按照其他注释中的指示生成一个线程,只需让您的主脚本进入休眠和轮询。

类似的东西:

wait=True
while wait:
   url=urllib.urlopen('http://'+username+':'+password+'@localhost/httpAuth/action.html?add2Queue='+btid+'&system.name=<btid>&system.value=<'+btid+'>&system.name=<buildNumber>&system.value=<'+buildNumber+'>')
   if url.getcode()!=404:
     wait=False
   else:
     time.sleep(60)

作为替代方案,您可以使用CherryPy。然后,当构建完成后,您可以卷曲或wget连接到监听CherryPy服务器并触发您的应用程序下载URL。

你也可以使用xmlrpclib做类似的事情。

答案 1 :(得分:0)

Python实际上有一个threading system与Java非常相似,所以你应该可以毫不费力地使用它。

但如果你需要做的只是等待一段预定的时间,请使用

import time
time.sleep(300) # sleep for 300 seconds