2014-05-07 16 views
0

我打算寫一個遠程代理模塊波紋管:我可以使用fabric作爲併發方式的lib嗎?

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不能同時使用,否則會有一場比賽條件。

我的問題是:如何將fabric作爲lib以併發方式使用?

回答

1

這取決於併發的類型,你想使用。

在線程併發中使用結構並不是一個好主意。面料不是線程安全的(請參見FAQ中的最後一個問題)。

雖然使用multiprocessing模塊進行併發處理沒有問題。 Fabric在內部使用它來提供它們的Parallel execution功能。

+0

是的,我正在閱讀結構源代碼並嘗試爲線程併發性進行更新。啊,讓我用多處理來完成我的工作:) – WKPlus

相關問題