파이썬에서 하나의리스트에 여러 개의 병렬 프로세스를 작성했습니다. 내 코드입니다 : 그것은이 같은파이썬에서리스트에 병렬 쓰기
global_list = []
class MyThread(threading.Thread):
...
def run(self):
results = self.calculate_results()
global_list.extend(results)
def total_results():
for param in params:
t = MyThread(param)
t.start()
while threading.active_count() > 1:
pass
return total_results
나는이 aproach을 좋아하지 않는다 :
- 전반적인 글로벌 변수 -> 무엇`TOTAL_RESULTS 함수에 대한 지역 변수를 가지고 할 수있는 방법이 있을까요?
- 목록이 반환 될 때 확인하는 방법은 다소 서투른 것처럼 보이지만 표준 방법은 무엇입니까?
현재 코드에서 둘 이상의 스레드에서 공유 메모리 (전역 목록)를 수정 중이며 수정 작업 주위에 뮤텍스/잠금이 필요합니다. – davecom
@davecom : 그것은 직관적이지만 실제로는 사실이 아닙니다. 명시 적 잠금 없이도 여러 스레드에서 목록을 수정할 수 없게하는 Python Global Interpreter Lock이 제공됩니다. –
에 따르면 http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm '확장'은 원자 적 연산이므로 자물쇠가 필요하지 않습니다. – ProfHase85