运行示例程序有报错?(用户自己的问题)
wthahaha opened this issue · 2 comments
wthahaha commented
import time
from funboost import boost, BrokerEnum,get_consumer,run_consumer_with_multi_process
def f(a, b):
return a+b
consumer = get_consumer('queue_test_f01', consuming_function=f,qps=0.2, broker_kind=2)
if __name__ == "__main__":
# 需要手动指定consuming_function入参的值。
for i in range(10, 2000):
consumer.publisher_of_same_queue.publish(dict(a=i, b=i * 2))
consumer.start_consuming_message()
run_consumer_with_multi_process(consumer,8)
运行后,报错:
Traceback (most recent call last):
File "main.py", line 16, in <module>
run_consumer_with_multi_process(consumer,8)
File "/home/project/test_mul_thread/venv/lib/python3.8/site-packages/funboost/helpers.py", line 45, in run_consumer_with_multi_process
if not getattr(task_fun, 'is_decorated_as_consume_function'):
AttributeError: 'RedisConsumer' object has no attribute 'is_decorated_as_consume_function'
但不影响程序执行,程序会正常继续运行,想知道这个错误是否可以规避?
ydf0509 commented
非装饰器方式不支持多进程。只有装饰器才可以。
@boost('queue_test_f01', qps=0.2, broker_kind=2)
def f(a, b):
print(a + b)
for i in range(10, 20):
f.pub(dict(a=i, b=i * 2))
f.push(i, i * 2)
f.consume()
# f.multi_process_conusme(8) # # 这个是新加的方法,细粒度 线程 协程并发 同时叠加8个进程,速度炸裂。主要是无需导入run_consumer_with_multi_process函数。
# run_consumer_with_multi_process(f,8) # 这个是细粒度 线程 协程并发 同时叠加8个进程,速度炸裂。
ydf0509 commented
如果你非要用多进程,且不想用装饰器。那就使用方式二,或者自己手动开多进程。
https://funboost.readthedocs.io/zh/latest/articles/c4.html#id5