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

[修改部分内容,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)
巴扎黑

를 사용하여 처리하는 것이 좋습니다. Python3은 일반 함수처럼 다중 스레드와 다중 프로세스를 사용할 수 있는 패키지된 concurdirect.futures 모듈을 갖기 시작했습니다.

Ty80

우선, Python 메커니즘의 한계로 인해 效率极低 자체의 멀티스레딩은 GIL(Global Interpreter Lock:全局解释锁)입니다. 그 기능은 간단합니다. 对于一个解释器,只能有一个线程在执行bytecode。
그래서 효율성을 추구한다면. 전통적인 의미의 멀티스레딩, Python 세계에서는 멀티프로세스(multiprocessing)를 사용해보자...

여기에서는 멀티스레딩을 사용하고 잠금을 사용하여 공용 리소스를 제어합니다. 우선, 이것을 잠그면 교착 상태가 발생합니다. 잠금이 없으면 교착 상태 위험은 없지만 동기화 문제가 발생합니다.

또한, 서로 다른 스레드가 서로 다른 파일을 운용하는 경우에는 동기화 문제가 없으며, 동일한 파일이 운용되는 경우에는 Queue(큐)를 사용하여 처리하는 것이 좋습니다.

일반적으로 싱글 스레드를 사용하는 것이 더 좋습니다. Python멀티 스레딩 자체는 비효율적이고, 싱글 스레드로는 동기화 문제를 고려할 필요가 없기 때문입니다. 효율성을 추구해야 한다면 여러 프로세스를 사용하는 것도 고려해야 합니다.

阿神
  1. 다른 파일을 열 때 잠금이 필요하지 않습니다

  2. 동일한 파일을 열려면 잠금이 필요하지 않습니다

잠금의 효율성이 매우 낮습니다. "잠금"을 "병렬/대기열"로 변경해 보세요.

迷茫

아니요, 멀티스레딩/잠금 등은 성능을 저하시킵니다. 단일 스레드 비동기 처리만이 성능을 향상시킵니다

伊谢尔伦

이로 인해 소유-요청 교착 상태가 쉽게 발생할 수 있으며, 다른 조건(배타적, 비선점형, 순환 요청)으로 인해 교착 상태가 발생할 수 있습니다. 그리고 잠금은 데이터 보안을 강화하지만 성능은 필연적으로 저하됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿