파일을 열 때 다중 처리가 작동하지 않는 이유는 무엇입니까?

금욕적인

멀티 프로세싱 풀 모듈을 시험 할 때 어떤 종류의 파일도로드 / 열 때 작동하지 않는다는 것을 알았습니다. 아래 코드는 예상대로 작동합니다. 8-9 행의 주석 처리를 제거하면 스크립트가 pool.apply_async메서드를 건너 뛰고 loopingTest실행되지 않습니다.

import time
from multiprocessing import Pool


class MultiClass:
    def __init__(self):
        file = 'test.txt'
        # with open(file, 'r') as f:  # This is the culprit
        #     self.d = f
        self.n = 50000000
        self.cases = ['1st time', '2nd time']
        self.multiProc(self.cases)
        print("It's done")

    def loopingTest(self, cases):
        print(f"looping start for {cases}")
        n = self.n
        while n > 0:
            n -= 1
        print(f"looping done for {cases}")

    def multiProc(self, cases):
        test = False
        pool = Pool(processes=2)
        if not test:
            for i in cases:
                pool.apply_async(self.loopingTest, (i,))
            pool.close()
            pool.join()



if __name__ == '__main__':
    start = time.time()
    w = MultiClass()
    end = time.time()
    print(f'Script finished in {end - start} seconds')
피해를 주다

이 동작 apply_async은 파일 설명자 ( self.d)를 인스턴스에 저장할 때 호출 이 실패 하기 때문에 표시 됩니다 . 를 호출 할 때 apply_async(self.loopingTest, ...)Python은이 self.loopingTest를 작업자 프로세스로 보내기 위해 피클해야하며 ,이 역시 피클 링이 필요합니다 self. 열린 파일 설명자를의 속성으로 저장 self하면 파일 설명자를 피클 할 수 없기 때문에 피클 링이 실패합니다. 샘플 코드 apply대신 사용하면 직접 확인할 수 있습니다 apply_async. 다음과 같은 오류가 발생합니다.

Traceback (most recent call last):
  File "a.py", line 36, in <module>
    w = MultiClass()
  File "a.py", line 12, in __init__
    self.multiProc(self.cases)
  File "a.py", line 28, in multiProc
    out.get()
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 644, in get
    raise self._value
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 424, in _handle_tasks
    put(task)
  File "/usr/lib/python3.6/multiprocessing/connection.py", line 206, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "/usr/lib/python3.6/multiprocessing/reduction.py", line 51, in dumps
    cls(buf, protocol).dump(obj)
TypeError: cannot serialize '_io.TextIOWrapper' object

파일 설명자를에 저장하지 self않고 작업자 메서드에서만 생성하거나 (사용해야하는 경우) Python이 제공하는 도구사용 하여 클래스의 피클 / 피클 해제 프로세스를 제어하여 코드를 변경해야합니다. 사용 사례에 따라 전달하는 메서드를 apply_async최상위 함수로 전환 할 수도 있으므로 self전혀 피클 할 필요가 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

WPF DataGrid 열을 다시 만들 때 Dispatcher.BeginInvoke가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Firefox에서 파일로 직접 열었지만 XAMPP 서버에서는 작동하지 않을 때 jQuery가 작동하는 이유는 무엇입니까?

분류에서Dev

다중 처리가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

파일을 추가 할 때 수은 파일 세트가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

문자열을 전달할 때 $ @가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

인수가 배열을 가리키는 역 참조 된 포인터 일 때`sizeof ()`가 예상대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

scanf ()가 배열과 배열을 동일하게 처리하지 않는 이유는 무엇입니까?

분류에서Dev

참조로 배열을 전달할 때 변수가 정의되지 않았다는 컴파일러 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

감시중인 파일을 열 때만 fs.watch가 트리거되는 이유는 무엇입니까?

분류에서Dev

새 파일을 열 때 다중 명령 vim 명령 모드 약어가 자동으로 실행되는 이유는 무엇입니까?

분류에서Dev

파일 한 줄을 읽을 때마다 객체가 배열에 저장되지 않는 이유는 무엇입니까? 자바

분류에서Dev

때때로 일부 키보드 키가 작동하지 않고 다른 경우에는 작동하는 이유는 무엇입니까?

분류에서Dev

Emacs : 파일을 열 때 주 모드가 올바르게 설정되지 않은 이유는 무엇입니까?

분류에서Dev

tolist 변환 된 배열이 파이썬 다중 처리에 추가되지 않는 이유는 무엇입니까?

분류에서Dev

.NET 4.5-StreamWriter가 파일에 쓸 때 문자열로 예상대로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

내 애플리케이션 중 일부를 열 때 런처에 표시되지 않는 이유는 무엇입니까?

분류에서Dev

whould xterm이 동일한 실행 파일을 가리킬 때 x-terminal-emulator와 다르게 작동하는 이유는 무엇입니까?

분류에서Dev

중복 행을 방지하는 트리거가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

상수가 아닌 포인터에 문자열 리터럴을 할당 할 때 C 컴파일러가 경고하지 않는 이유는 무엇입니까?

분류에서Dev

IP 적중을 계산하려고 할 때 세션이 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Java의 역 문자열 논리가 파이썬에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

typeModel을 컴파일 할 때 일부 내장 유형이 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Delegate의 반환 값이 C #에서 처리되지 않을 때 컴파일러 오류가 발생하지 않는 이유는 무엇입니까?

분류에서Dev

간격의 길이가 1 일 때 R 열 간격 분할이 작동하지 않는 이유는 무엇입니까?

분류에서Dev

열이 null 일 때 jsonb-functions가 업데이트에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

지수가 음수 일 때 numpy.power가 배열에서 요소별로 작동하지 않는 이유는 무엇입니까?

분류에서Dev

동일한 페이지에서 두 가지 다른 작업을 수행 할 때 mapStateToProps () 함수를 처리하는 방법은 무엇입니까?

분류에서Dev

Android 외장 메모리 카드에 파일을 붙여 넣을 때만 Teracopy 소프트웨어가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

Safari가 Chrome과 비교할 때 변환 변환을 다르게 처리하는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    WPF DataGrid 열을 다시 만들 때 Dispatcher.BeginInvoke가 작동하지 않는 이유는 무엇입니까?

  2. 2

    Firefox에서 파일로 직접 열었지만 XAMPP 서버에서는 작동하지 않을 때 jQuery가 작동하는 이유는 무엇입니까?

  3. 3

    다중 처리가 작동하지 않는 이유는 무엇입니까?

  4. 4

    파일을 추가 할 때 수은 파일 세트가 작동하지 않는 이유는 무엇입니까?

  5. 5

    문자열을 전달할 때 $ @가 작동하지 않는 이유는 무엇입니까?

  6. 6

    인수가 배열을 가리키는 역 참조 된 포인터 일 때`sizeof ()`가 예상대로 작동하지 않는 이유는 무엇입니까?

  7. 7

    scanf ()가 배열과 배열을 동일하게 처리하지 않는 이유는 무엇입니까?

  8. 8

    참조로 배열을 전달할 때 변수가 정의되지 않았다는 컴파일러 오류가 발생하는 이유는 무엇입니까?

  9. 9

    감시중인 파일을 열 때만 fs.watch가 트리거되는 이유는 무엇입니까?

  10. 10

    새 파일을 열 때 다중 명령 vim 명령 모드 약어가 자동으로 실행되는 이유는 무엇입니까?

  11. 11

    파일 한 줄을 읽을 때마다 객체가 배열에 저장되지 않는 이유는 무엇입니까? 자바

  12. 12

    때때로 일부 키보드 키가 작동하지 않고 다른 경우에는 작동하는 이유는 무엇입니까?

  13. 13

    Emacs : 파일을 열 때 주 모드가 올바르게 설정되지 않은 이유는 무엇입니까?

  14. 14

    tolist 변환 된 배열이 파이썬 다중 처리에 추가되지 않는 이유는 무엇입니까?

  15. 15

    .NET 4.5-StreamWriter가 파일에 쓸 때 문자열로 예상대로 작동하지 않는 이유는 무엇입니까?

  16. 16

    내 애플리케이션 중 일부를 열 때 런처에 표시되지 않는 이유는 무엇입니까?

  17. 17

    whould xterm이 동일한 실행 파일을 가리킬 때 x-terminal-emulator와 다르게 작동하는 이유는 무엇입니까?

  18. 18

    중복 행을 방지하는 트리거가 작동하지 않는 이유는 무엇입니까?

  19. 19

    상수가 아닌 포인터에 문자열 리터럴을 할당 할 때 C 컴파일러가 경고하지 않는 이유는 무엇입니까?

  20. 20

    IP 적중을 계산하려고 할 때 세션이 작동하지 않는 이유는 무엇입니까?

  21. 21

    Java의 역 문자열 논리가 파이썬에서 작동하지 않는 이유는 무엇입니까?

  22. 22

    typeModel을 컴파일 할 때 일부 내장 유형이 작동하지 않는 이유는 무엇입니까?

  23. 23

    Delegate의 반환 값이 C #에서 처리되지 않을 때 컴파일러 오류가 발생하지 않는 이유는 무엇입니까?

  24. 24

    간격의 길이가 1 일 때 R 열 간격 분할이 작동하지 않는 이유는 무엇입니까?

  25. 25

    열이 null 일 때 jsonb-functions가 업데이트에서 작동하지 않는 이유는 무엇입니까?

  26. 26

    지수가 음수 일 때 numpy.power가 배열에서 요소별로 작동하지 않는 이유는 무엇입니까?

  27. 27

    동일한 페이지에서 두 가지 다른 작업을 수행 할 때 mapStateToProps () 함수를 처리하는 방법은 무엇입니까?

  28. 28

    Android 외장 메모리 카드에 파일을 붙여 넣을 때만 Teracopy 소프트웨어가 작동하지 않는 이유는 무엇입니까?

  29. 29

    Safari가 Chrome과 비교할 때 변환 변환을 다르게 처리하는 이유는 무엇입니까?

뜨겁다태그

보관