我可以同时使用fabric作为lib吗?

时间:2014-05-07 06:12:05

标签: python fabric

我打算编写一个远程代理模块,如下所示:

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?

2 个答案:

答案 0 :(得分:1)

这取决于您要使用的并发类型。

使用带有线程并发性的结构并不是一个好主意。 Fabric不是线程安全的(参见FAQ中的最后一个问题)。

使用multiprocessing模块的进程并发性没有问题。 Fabric在内部使用它来提供Parallel execution功能。

答案 1 :(得分:0)

fabric.api中有一个并行装饰器,parallel in fabric