스플릿을 사용하여 분할하고 추가하려는 코드 기반이 있지만, 처리 방법이 비교적 새로운 코드 기반이 있습니다. 이 코드를 다시 작성하지 말고 문제 해결을 위해 저에게 던지기 만하면되는 바램을 존중 해주십시오. 나는 오히려 누군가 나를 위해 그것을 해결하는 것보다 올바른 방향으로 나를 가리키는 누군가에 의해 문제를 해결하려고한다. 나는 그렇게 잘 배우지 못합니다.파이썬 프로그램을 스레드 응용 프로그램으로 변환하는 프로세스가 있습니까?
완전히 작동하는 코드베이스는 here입니다. easy_install을 통해 설치할 수있는 mechanize 및 beautifulsoup 라이브러리가 필요합니다.
필자는 모든 기능을 분리하여 코드를 가능한 한 깨끗하게 유지하려고 노력했습니다. 그 중에 몇 가지 최적화 기능이 포함되어 있다고 확신하지만 주요 문제는
내 궁극적 인 목표는 스레드에이 팩을하는 것입니다.이 스레드, 내 원래의 코드가 '백그라운드로'실행되는 동안 다음 다른 일을하기 위해 다른 초기화 브라우저 객체 사이의 쿠키를 공유 할 수 있습니다.
을 제가했습니다 시도 :
class Recon(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
#Packed the stuff above my original while loop in here, minus functions.
def run(self):
#Packed my code past the while loop in here.
somevar = Recon()
somevar.start()
문제 나는 프로그램을 실행하면 init에있는 것들을 실행할 것입니다. 그러나 이후에는 그냥 앉아서 멈춰 버립니다. 흔적도없고, 오류도없고, 아무 것도하지도 않으며 내 명령 프롬프트를 다시 내 통제로 돌려 보내지도 않습니다.
일부 팁이나 이것을 변환하는 방법에 대한 일반적인 흐름을 얻을 수 있습니까? 나는 압도되어서 내가 시도하고있는 코드를 삭제했기 때문에 나는 그 예를 가지고 있지 않지만 내가 '자기'를 앞세워야 할 필요가있다. 내 모든 변수에? 내 vars를 전역으로 정의해야합니까?
여기 스크립트를 threading으로 변환하려고 시도한 후 문제가 발생한 것을 재현합니다.
귀하의 가정은 모두 정확합니다. 나는 스레딩을 소개하고,리스트와 쿠키 객체만을 공유 할 미래의 코드를 준비하려고한다. 그 아이디어는 하나의 쓰레드로 데이터를 긁어 내고 다른 쓰레드에서 그 데이터를 처리하는 것입니다 (그러나 액세스되는 데이터는 결코 동시에 액세스되지 않습니다) init을 호출하고 실행하면 ... 내 init은 원시 입력을 요구하고, python은 init에서 입력을 기다리는 동안 실행 함수를 실행하게할까요? 아니면 init이 먼저 끝나야합니까? – ThantiK
@ThantiK, Python의 모든 I/O 함수는 "GIL을 삭제합니다"(전역 인터프리터 잠금)하므로 다른 스레드 (I/O가 아닌 CPU 작업 포함)가 대신 할 수 있습니다. 그러나 스레드 하위 클래스의'__init__'는 스레드를 인스턴스화하는 스레드에서 실행됩니다 (일반적인 경우 기본 스레드, 특히 자신의 경우). 새 스레드는'start' 메서드 호출시에만 생성되며, run은'run' 메소드입니다. –
이것은 나의 변환 결과로 지금은 잘 작동하고 있습니다 : http://pastebin.com/Pb582aF3 청결한 비평이나 비판을 환영하는 모든 도움을 환영합니다;) – ThantiK