TL; DR:我无法获得最基本的dispy
示例代码以便正常运行。为什么不呢?
详细信息:
我试图在python中进行分布式处理,并认为dispy库听起来很有趣,因为它具有全面的功能集。
但是,我一直试图遵循他们的基本规范程序示例,而且我无处可去。
python -m pip install dispy
)python dispynode.py
。它似乎工作,因为我得到以下输出:
2016-06-14 10:33:38 dispynode - dispynode version 4.6.14
2016-06-14 10:33:38 asyncoro - 版本4.1带epoll I / O通知器
2016-06-14 10:33:38 dispynode - 在10.0.48.54:51348服务8 cpus输入"退出"或"退出"终止dispynode,"停止"停止 服务,"开始"重启服务," cpus"更改使用的CPU,
获得状态的其他任何东西:
# function 'compute' is distributed and executed with arguments
# supplied with 'cluster.submit' below
def compute(n):
import time, socket
time.sleep(n)
host = socket.gethostname()
return (host, n)
if __name__ == '__main__':
# executed on client only; variables created below, including modules imported,
# are not available in job computations
import dispy, random
# distribute 'compute' to nodes; 'compute' does not have any dependencies (needed from client)
cluster = dispy.JobCluster(compute)
# run 'compute' with 20 random numbers on available CPUs
jobs = []
for i in range(20):
job = cluster.submit(random.randint(5,20))
job.id = i # associate an ID to identify jobs (if needed later)
jobs.append(job)
# cluster.wait() # waits until all jobs finish
for job in jobs:
host, n = job() # waits for job to finish and returns results
print('%s executed job %s at %s with %s' % (host, job.id, job.start_time, n))
# other fields of 'job' that may be useful:
# job.stdout, job.stderr, job.exception, job.ip_addr, job.end_time
cluster.print_status() # shows which nodes executed how many jobs etc.
当我运行它(python sample.py
)时,它就会挂起。通过pdb调试,我发现它最终挂在dispy/__init__.py(117)__call__()
。该行显示self.finish.wait()
。完成只是一个python线程,因为wait()
然后进入lib/python3.5/threading.py(531)wait()
。一旦遇到等待,它就会挂起。
我尝试在客户端计算机上运行dispynode并获得相同的结果。我已经尝试了很多将节点传递到集群创建的变体,例如:
cluster = dispy.JobCluster(compute, nodes=['localhost'])
cluster = dispy.JobCluster(compute, nodes=['*'])
cluster = dispy.JobCluster(compute, nodes=[<hostname of the remote node running the client>])
我尝试使用cluster.wait()
行取消注释并获得相同的结果。
当我添加日志记录(cluster = dispy.JobCluster(compute, loglevel = 10)
)时,我在客户端获得了以下输出:
2016-06-14 10:27:01 asyncoro - 版本4.1带有epoll I / O通知器
2016-06-14 10:27:01 dispy - dispy客户:51347 2016-06-14 10:27:01 dispy - 在&#34; _dispy_20160614102701&#34;中存储故障恢复信息;
2016-06-14 10:27:01 dispy - 待定职位:0
2016-06-14 10:27:01 dispy - 待定职位:1
2016-06-14 10:27:01 dispy - 待定职位:2
2016-06-14 10:27:01 dispy - 待定职位:3
2016-06-14 10:27:01 dispy - 待定职位:4
2016-06-14 10:27:01 dispy - 待定职位:5
2016-06-14 10:27:01 dispy - 待定职位:6
2016-06-14 10:27:01 dispy - 待定职位:7
2016-06-14 10:27:01 dispy - 待定职位:8
2016-06-14 10:27:01 dispy - 待定职位:9
2016-06-14 10:27:01 dispy - 待定职位:10
这看起来并不出人意料,但并没有帮助我找出工作没有运行的原因。
对于它的价值,这里的_dispy_20160614102701.bak:
&#39; _cluster&#39;,(0,207)
&#39; compute_1465918021755&#39;,(512,85)
同样,_dispy_20160614102701.dir:
&#39; _cluster&#39;,(0,207)
&#39; compute_1465918021755&#39;,(512,85)
我猜对了,除非我使用的是不稳定的版本。
答案 0 :(得分:1)
首次在网络上设置和使用dispy时,我发现在创建作业集群时必须指定客户端节点IP,请参阅下文:
cluster = dispy.JobCluster(compute, ip_addr=your_ip_address_here)
看看是否有帮助。
答案 1 :(得分:0)
如果您只是在客户端上运行sample.py,请在主要声明中更改以下内容:
cluster = dispy.JobCluster(compute,nodes = [&#39; nodeip_1&#39;,&#39; nodeip_2&#39;,.....,&#39; nodeip_n])
然后在IDE中或通过shell运行它。
我希望有所帮助。
答案 2 :(得分:0)
在执行public class LoginTest {
@Test
public void Test01_LoginPage() {
//Some Code here
}
@Test
public void Test02_LoginPage() {
//Some Code Here
}
@BeforeMethod
public void beforeTestCase(Method m) {
System.out.println(m.getName());
}
@AfterMethod
public void AfterTestCase(Method m) {
System.out.println(m.getName());
}
}
之前,python sample.py
仍应在localhost或其他计算机上运行(如果您不想指定复杂选项,请注意其他计算机应位于同一网络中。)< / p>
我遇到了同样的问题并以这种方式解决了这个问题:
dispynode.py
(不要终止它)$ dispynode.py
不要忘记函数 compute 在等待一段时间后,输出应该在执行sample.py后至少20秒出现。
答案 3 :(得分:0)
试试这个
python /home/$user_name/.local/lib/python3.9/site-packages/dispy/dispynode.py
python sample.py
它对我有用