多线程 - python多个线程锁可提高效率吗?
阿神
阿神 2017-04-17 17:36:49
0
5
532

[修改部分内容,sorry有两点原来我没有讲清楚,我重新修改了示例代码
1 使用多线程是因为网络IO
2 下面的三个资源都是线程共享的,所以要加锁
]
优化多线程的效率问题

原先的多线程结构如下:
建立一个锁,所有不安全的函数都用这个锁

class():

self.lock = threading.lock()

def out_to_file1(self): #第一个资源
    self.lock.acquire()
    f = open(file1)
    f.write()
    f.close()
    self.lock.release()
    
def out_to_file2(self): #第二个资源
    self.lock.acquire()
    f = open(file2)
    f.write()
    f.close()
    self.lock.release()

def update_scan_count(self): #第三个资源
    self.lock.acquire()
    self.scan_count += 1
    self.lock.release()
    
def _scan(self): #每个线程的内部逻辑
    while self.queue.qsize() > 0 and self.is_continue:
    ...
    此处代码为处理网络IO(我使用多线程的原因)
    ...     
    out_to_file2()
    update_scan_count()
    out_to_file1()
    
def main(self):
    for i in range():
        t = threading.Thread(target=self._scan, name=str(i))
        setdaemon
        t.start()
        t.join()

现在考虑建立三个锁

lock1 = threading.lock()
lock2 = threading.lock()
lock3 = threading.lock()

分别锁住这三个资源

请问这样的效率会提高吗?有其他好的建议吗?多谢!
PS:求提供一些优秀的py多线程开源项目,想阅读学习一下!

阿神
阿神

闭关修行中......

全員に返信(5)
巴扎黑

処理には queueQueue を使用することをお勧めします。 Python3 では、パッケージ化された concurrect.futures モジュールが登場し、通常の関数と同様にマルチスレッドとマルチプロセスを使用できます。

いいねを押す +0
Ty80

まず、Python 自体のマルチスレッドは、效率极低 メカニズムの制限により GIL(Global Interpreter Lock:全局解释锁) になります。その機能は単純です。 对于一个解释器,只能有一个线程在执行bytecode。
したがって、効率を追求したい場合。従来の意味でのマルチスレッドの代わりに、Python ワールドでマルチプロセス (multiprocessing) を使用しましょう...

ここでは、マルチスレッドを使用し、ロックを使用してパブリック リソースを制御します。まず、ロックしないとデッドロックが発生しますが、同期の問題が発生します。

また、異なるスレッドが異なるファイルを操作する場合、同じファイルを操作する場合は、Queue (キュー) を使用して処理することをお勧めします。

一般に、Pythonマルチスレッド自体は非効率的であり、単一スレッドでは同期の問題を考慮する必要がないため、単一スレッドを使用することをお勧めします。効率を追求する必要がある場合は、プロセスロックの使用も考慮する必要があります。

いいねを押す +0
阿神
  1. 別のファイルを開くのにロックは必要ありません

  2. 同じファイルを開くのにロックは必要ありません

ロック効率が非常に低いため、「ロック」を「パラレル/キュー」に変更してみてください。

いいねを押す +0
迷茫

いいえ、マルチスレッド/ロックなどはパフォーマンスを低下させます。シングルスレッドの非同期処理のみがパフォーマンスを向上させます。

いいねを押す +0
伊谢尔伦

これにより、占有リクエストのデッドロック状態が簡単に発生する可能性があり、他の状態 (排他的、非プリエンプティブル、循環リクエスト) によってもデッドロックが発生します。また、ロックによりデータのセキュリティは強化されますが、パフォーマンスの低下は避けられません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!