ydf0509/funboost

运行示例程序有报错?(用户自己的问题)

wthahaha opened this issue · 2 comments

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'

但不影响程序执行,程序会正常继续运行,想知道这个错误是否可以规避?

非装饰器方式不支持多进程。只有装饰器才可以。

   @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个进程,速度炸裂。

如果你非要用多进程,且不想用装饰器。那就使用方式二,或者自己手动开多进程。

https://funboost.readthedocs.io/zh/latest/articles/c4.html#id5

image