별도의 스레드에서 실행하고자하는 일련의 '작업'이 있습니다. 작업은 별도의 모듈에 의해 수행됩니다. 각각은 업무 처리를위한 비즈니스 로직을 포함합니다.파이썬에서 스레드 생성하기
여러 개의 태스크가 주어지면 다음과 같이 각 모듈에 대해 새 스레드를 생성하고 싶습니다.
from foobar import alice, bob charles
data = getWorkData()
# these are enums (which I just found Python doesn't support natively) :(
tasks = (alice, bob, charles)
for task in tasks
# Ok, just found out Python doesn't have a switch - @#$%!
# yet another thing I'll need help with then ...
switch
case alice:
#spawn thread here - how ?
alice.spawnWorker(data)
추측을위한 상금 나는 여전히 C++로 생각하고 있습니다. Pythonic 'enums'및 'switch'를 사용하여 Pythonic 방식으로 이것을 작성하고 새 스레드에서 모듈을 실행할 수있게하려면 어떻게해야합니까?
분명히 모듈에는 모두 Plugin이라는 ABC (추상 기본 클래스)에서 파생 된 클래스가 있습니다. spawnWorker() 메서드는 Plugin 인터페이스에서 선언되고 다양한 모듈에 구현 된 클래스에서 정의됩니다.
아마도이 모든 작업을 수행하는 데 더 좋은 (Pythonic) 방법이있을 수 있습니다. 나는 알고에 관심이있을 것
[편집]
난 그냥 더 봇을 읽어 봤는데 적어도이 아닌 의미에서 (파이썬은 진정한 의미에서 스레딩을 구현하지 않습니다 보인다 C++ 프로그래머는 생각할 것입니다.) 어쨌든 저를위한 쇼 스토퍼가 아닙니다. 각각의 작업은 상당히 시간이 많이 걸리고 또 다른 작업이 완료 될 때까지 하나의 작업을 시작하고 싶지 않습니다. 스레딩을 사용하는 이유입니다. 타임 슬라이싱은별로 신경 쓰지 않습니다. 파이썬은 동시에 (또는 잠시 후에) 거의 모두 시작될 때 파이썬이 원하는만큼 트레드를 타임 슬립 할 수 있습니다.
저는 비슷한 질문에 대한 답변을 여기에서 보았습니다.
import threading
class Foo (threading.Thread):
def __init__(self,x):
self.__x = x
threading.Thread.__init__(self)
def run (self):
print str(self.__x)
for x in xrange(20):
Foo(x).start()
을 내 ABC 플러그인이를 사용하여 생각하고 다음과 같이
사용자는 스레딩에 대한 간단한 클래스를 제공합니다. 내 질문은 실제 작업 (예 : 비즈니스 로직)이 완료된 곳에서 코드를 어디에 넣는가입니다. 나는 이것이 Foo 클래스의 run() 메소드에 있다고 가정한다. (당연한 질문이지만, 나는 어떤 가정을하고 싶지 않다.)
오른쪽 트랙 또는 결함에 대한 내 생각인가 (결함이 있다면? - 내가 놓친 것)
switch-case 대신 적절한 다형성 (ABC 상속 또는 오리 입력)을 사용하지 않는 이유는 무엇입니까? – Santa
@Santa : 좋은 지적. 어떻게 C++에서 (다형성) 그것을했을 것입니다. 그러나 파이썬이이를 지원하는지에 대해서는 잘 모르겠습니다. – morpheous
@morpheous 전통적인 상속 기반 다형성에 더하여, 파이썬은 다형성에 대한보다 역동적 인 접근법을 지원하며, 가장 중요한 것은 오리 타이핑입니다. – Santa