我想在Python 3中創建一個構造,這將允許我輕鬆地在遠程計算機上執行一個函數。 假設我已經有將要運行它接收到的功能,在遠程服務器上運行一個Python TCP服務器,我目前考慮使用像如何將python函數複製到遠程機器然後執行它?
@execute_on(address, port)
這是一個裝飾將創造需要必要的上下文執行正在裝飾的函數,然後將函數和上下文發送到遠程機器上的tcp服務器,然後執行它。首先,這是否有點理智?如果不是,你能推薦一個更好的方法嗎?我做了一些谷歌搜索,但沒有發現任何符合這些需求的東西。
我有一個快速和骯髒的實施tcp服務器和客戶端,所以相當肯定會工作。我可以得到的字符串表示的功能(例如FUNC)由
import inspect
string = inspect.getsource(func)
然後可以被髮送到其中可以執行服務器被傳遞到裝飾。問題是,我如何獲得該函數執行所需的所有上下文信息?例如,如果func被定義如下,
import MyModule
def func():
result = MyModule.my_func()
MyModule的需要提供給FUNC或者在全球範圍內或funcs中的遠程服務器上的本地上下文。在這種情況下,這是相對平凡的,但取決於何時以及如何使用導入語句,它可能會變得更加複雜。有沒有一種簡單而優雅的方式來在Python中做到這一點?目前最好的方法是使用ast庫來提取所有導入語句,使用inspect模塊獲取這些模塊的字符串表示,然後重新構建遠程服務器上的整個上下文。不是特別優雅,我可以看到很多錯誤的空間。
感謝您的時間
對於execnet爲+1。我用它來以分佈式方式執行一些測試用例,它效果很好。 – 2010-06-03 05:14:27