1

파이썬을 사용하여 비동기 끌어 오기 구독자를 구현했습니다. 이것은 기본 코드 나는Python Pub/Sub 비동기 풀 구독자 스레드 수 설정

는 A 인쇄해야

def receive_messages(project, subscription_name): 

    subscriber = pubsub_v1.SubscriberClient() 
    subscription_path = subscriber.subscription_path(
     project, subscription_name) 

    def callback(message): 
     print ("A") 
     time.sleep(2) 
     print('Received message: {}'.format(message)) 
     message.ack() 
     print ("B") 

    subscriber.subscribe(subscription_path, callback=callback) 

    print('Listening for messages on {}'.format(subscription_path)) 
    while True: 
     time.sleep(60) 

,

메시지

B

메시지입니다

B

(순차적으로 실행해야 함) 또는 지정된 스레드 수를 통해 메시지를받습니다. 스레드 수를 제한하는 방법을 찾지 못했습니다. 내 프로그램 많은 스레드로 인해 세그먼트 오류이 발생했습니다.

메시지 수신을 위해 스레드를 제어하는 ​​방법.

답변

0

문제는 우리가 max_workers를 사용하여 최대 스레드 수를 설정할 수 있습니다 정책

from google.cloud import pubsub_v1 
from concurrent import futures 

subscriber = pubsub_v1.SubscriberClient() 
subscription_path = subscriber.subscription_path(project, subscription_name) 

def callback(message): 
     print (str(message.data) + " " + str(threading.current_thread())) 
     message.ack() 
flow_control = pubsub_v1.types.FlowControl(max_messages=10) 
executor = futures.ThreadPoolExecutor(max_workers=5) 
policy = pubsub_v1.subscriber.policy.thread.Policy(subscriber, subscription_path, executor=executor, flow_control=flow_control) 
policy.open(callback) 

를 사용하여 해결할 수 있습니다. 또한 흐름 제어 설정을 설정할 수 있습니다.