2017-08-05 13 views
0

は、だから私はオブジェクトと同時に2つの関数を実行する方法は?

import threading 
from threading import Thread 

def func1(): 
    print 'Working' 

def func2(): 
    print 'Working' 

if __name__ == '__main__': 
    Thread(target = func1).start() 
    Thread(target = func2).start() 

を示しており、この動作例を発見しました。

しかし、私は通常、この機能を持つオブジェクトを持っているとどうなりますか? 私が通常使用する2つの機能は次のとおりです。

statusbar() 
copyfrom(servername.strip()) 

以下にservername.strip()を追加するにはどうすればよいですか?

Thread(target = statusbar).start() 
Thread(target = copyfrom).start() 
+0

これが解決されたかどうかを確認するために@Proxにpingを実行します。 – SwiftsNamesake

答えて

1

targetは関数であるので、あなたは何をしたいんあなた自身機能を定義する必要があります

def doSomething(): 
    copyfrom(servername.strip()) 

をし、あなたのThreadに渡します。あなたは、単一の行でそれをしたい場合は

Thread(target=doSomething).start() 

、あなたは無名関数を使用できます。cᴏʟᴅsᴘᴇᴇᴅは彼の答えに言及したよう

Thread(target=lambda: copyfrom(servername.strip())).start() 

を、あなたはまた、コールバックの引数を指定することができますタプルとして:

Thread(target=copyfrom, args=(servername.strip(),)).start() 
0

ラムダ関数またはローカル関数のいずれかを使用します。

Pythonで
Thread(target = lambda: copyfrom(servername.strip())).start() 

または

def thread_func(): 
    copyfrom(servername.strip()) 
Thread(target = thread_func).start() 

あなたは(ラムダもこの一種である、ローカル関数)関数内で関数を定義することができ、かつ内部の機能は、それが親関数だから名前にアクセスすることができます。実行しても元の機能が残っている 親の機能でオブジェクトの寿命を延ばすことに注意してください。だから、:

def foo(): 
    s = '... very long string ...' 
    def substr(a, b): 
    return s[a:b] 
    return substr 
a = foo() 

今、あなたはsにアクセスするためにaを使用することができます。しかし、aが存在する限り、sも、asubstrへの参照を保持し、sを参照します。

2

あなたはthreading.Threadに引数を渡すことができますので、これは動作するはずです:

Thread(target=statusbar).start() 
Thread(target=copyfrom, args=(servername.strip(),)).start() 

これは、私の意見では、最も簡単なオプションです。

+0

この特定のユースケースに対する妥当な答えです。 – SwiftsNamesake

関連する問題