我打算编写一个远程代理模块,如下所示:
from fabric.api import run as fab_run
from fabric.api import env as fab_env
class RemoteAgent(object):
def __init__(self, host, port, user, password):
self.host = host
self.port = port
self.user = user
self.password = password
def set_env(self):
fab_env.host_string = "%s:%s" % (self.host, self.port)
fab_env.user = self.user
fab_env.password = self.password
def run(self, cmd):
self.set_env()
return fab_run(cmd)
所以我可以像这样使用RemoteAgent
:
ra = RemoteAgent('192.168.1.102', 22, 'worker', 'password')
ra.run('killall java')
但RemoteAgent
不能同时使用,否则会出现竞争条件。
我的问题是:如何以并发的方式将结构用作lib?
答案 0 :(得分:1)
这取决于您要使用的并发类型。
使用带有线程并发性的结构并不是一个好主意。 Fabric不是线程安全的(参见FAQ中的最后一个问题)。
使用multiprocessing模块的进程并发性没有问题。 Fabric在内部使用它来提供Parallel execution功能。
答案 1 :(得分:0)
fabric.api中有一个并行装饰器,parallel in fabric