웹에서 정보를 추출하여 Python 목록에 저장하는 프로그램을 작성 중입니다. 다중 처리 방법을 사용하여 정보를 추출하고 추가 처리를 위해 출력 목록을 저장하는 데 문제가 있습니다. 이것은 내 코드입니다.
import multiprocessing
def web_scrape1():
#some codes to scrape the web output 3 lists
global sub_list1a, sub_list2a, sub_list3a
sub_list1a.append(scrape1)
sub_list2a.append(scrape2)
sub_list3a.append(scrape3)
def web_scrape2():
#some codes to scrape the web output 3 lists
global sub_list1b, sub_list2b, sub_list3b
sub_list1b.append(scrape1)
sub_list2b.append(scrape2)
sub_list3b.append(scrape3)
def master_scraper():
ws1 = multiprocessing.Process(target=web_scrape1)
ws2 = multiprocessing.Process(target=web_scrape2)
ws1.start()
ws2.start()
ws1.join()
ws2.join()
global master_list1, master_list2, master_list3
master_list1 = sub_list1a + sub_list1b
master_list2 = sub_list2a + sub_list2b
master_list3 = sub_list3a + sub_list3b
def postprocessing():
#some codes to process the lists
print(master_list1) # Output []
print(master_list2) # Output []
print(master_list3) # Output []
def main():
master_scraper()
postprocessing()
if __name__ == '__main__':
multiprocessing.freeze_support()
main()
위 코드의 출력은 간단합니다.
[]
[]
[]
, and 함수 multiprocessing.Array('b', sub_list1a)
내부에서 이와 같은 것을 사용하여 모든 목록을 공유 메모리에 할당하려고 시도 했지만 목록은 여전히 .web_scape1()
master_scraper()
main()
[]
여기에서 도움을 받기를 바랍니다.
에서는 multiprocessing
프로세스가 자체 메모리 영역을 보유하기 때문에 전역 변수를 사용할 수 없으므로 각 프로세스 내부의 변경 사항은 독립적입니다. 수행하려는 작업을 수행하는 가장 간단한 방법은 Manager
프로세스 간 통신에 a 를 사용하는 것입니다. output_container
각 함수에 액세스하고 수정할 수 있도록 생성 하고 전달할 수 있습니다 . 예를 들면 :
import multiprocessing as mp
def web_scrape1(output_container: list):
sample_text = 'value from web_scrape1'
output_container.append(sample_text)
def web_scrape2(output_container: list):
sample_text = 'value from web_scrape2'
output_container.append(sample_text)
if __name__ == "__main__":
output_container = mp.Manager().list()
worker1 = mp.Process(target=web_scrape1, args=(output_container,))
worker2 = mp.Process(target=web_scrape2, args=(output_container,))
worker1.start()
worker2.start()
worker1.join()
worker2.join()
print(output_container)
>>> ['value from web_scrape1', 'value from web_scrape2']
문서 에서 자세한 정보를 찾을 수 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다