Python django芹菜位置参数芹菜节拍调度错误

Python django芹菜位置参数芹菜节拍调度错误,python,django,celery,celerybeat,Python,Django,Celery,Celerybeat,由于位置参数,我无法让celerybeat计划我的函数 阅读文档时,我不明白为什么有些函数引用了一个数字,而有些函数引用了一个数字。我试图添加与函数相同的参数,但出现以下错误 check_arguments(*(args or ()), **(kwargs or {})) celery.beat.SchedulingError: Couldn't apply scheduled task list_market_catalogue: list_market_catalogue() takes

由于位置参数,我无法让celerybeat计划我的函数

阅读文档时,我不明白为什么有些函数引用了一个数字,而有些函数引用了一个数字。我试图添加与函数相同的参数,但出现以下错误

check_arguments(*(args or ()), **(kwargs or {}))
celery.beat.SchedulingError: Couldn't apply scheduled task 
list_market_catalogue: list_market_catalogue() takes 1 positional 
argument but 3 were given
谁能给我指出正确的方向吗

任务。py

ET_TENNIS = 2
@shared_task(bind=True)
def list_market_catalogue(self):
    logger.warning('+' * 80)
    trading = get_betfair_client()
    time_ago = timezone.now() + datetime.timedelta(minutes=1000)
    time_fwd = timezone.now() + datetime.timedelta(minutes=6000)
    mfilter = market_filter(
        event_type_ids=[ET_TENNIS] ,
        market_start_time=time_range(
             from_=time_ago.strftime('%Y-%m-%dT%H:%I:%S.000Z') ,
             to=time_fwd.strftime('%Y-%m-%dT%H:%I:%S.000Z')
             )
       )
    res = trading.betting.list_market_catalogue(
         mfilter ,
         market_projection=[
            'EVENT' ,
            'MARKET_START_TIME' ,
          # 'MARKET_DESCRIPTION',
          # 'RUNNER_METADATA',
        ] ,
        sort='FIRST_TO_START' ,
        max_results=100 ,
        lightweight=True)
    if not len(res):
        logger.error('Market catalogue listing is empty')
        trading.session_token = None
        raise self.retry(countdown=5 , max_retries=12)

    for cat in res:
        if 'venue' not in cat['event']:
        logger.error(f'No event venue in {cat}')
        continue
    try:
        event = parse_event(cat['event'])
        market = parse_market(event , cat)
        runners = parse_runners(market , cat['runners'])
    except:
        logger.warning(cat)
        raise
        logger.warning(f'BETFAIR: Scraped {len(res)} from market 
        catalogue')

@shared_task
def parse_runners(market , items):
    """Parses runners from MarketCatalogue object"""
    runners = []
    for runner_item in items:
        num = runner_item['metadata'].get('CLOTH_NUMBER')
        if not num:
            matches = re.match(r'^(\d+)' , runner_item['runnerName'])
            if matches:
                num = matches.groups(0)[0]
            else:
                logger.error(f'Could not match number for 
                {runner_item}')
        runner , created = Runner.objects.update_or_create(
            selection_id=runner_item['selectionId'] ,
            defaults={
                'market': market ,
                # default
                'name': runner_item['runnerName'].upper() ,
                'sort_priority': runner_item['sortPriority'] ,
                'handicap': runner_item['handicap'] ,
                # metadata
                'cloth_number': num ,
                'stall_draw': 
                runner_item['metadata'].get('STALL_DRAW') ,
                'runner_id': runner_item['metadata']['runnerId'] ,
            }
        )
        if created:
            logger.info(f'Created {runner}')
        else:
            logger.debug(f'Updated {runner}')
        runners.append(runner)
    return runners
CELERY_BEAT_SCHEDULE = {
'list_market_catalogue': {
    'task': 'trader.tasks.list_market_catalogue',
    'schedule': timedelta(seconds=5),
    'args': (['self'],)
},
'parse_runners': {
    'task': 'trader.tasks.parse_runners' ,
    'schedule': timedelta(seconds=5) ,
    'args': (['market'],['items'])
},
设置.py

ET_TENNIS = 2
@shared_task(bind=True)
def list_market_catalogue(self):
    logger.warning('+' * 80)
    trading = get_betfair_client()
    time_ago = timezone.now() + datetime.timedelta(minutes=1000)
    time_fwd = timezone.now() + datetime.timedelta(minutes=6000)
    mfilter = market_filter(
        event_type_ids=[ET_TENNIS] ,
        market_start_time=time_range(
             from_=time_ago.strftime('%Y-%m-%dT%H:%I:%S.000Z') ,
             to=time_fwd.strftime('%Y-%m-%dT%H:%I:%S.000Z')
             )
       )
    res = trading.betting.list_market_catalogue(
         mfilter ,
         market_projection=[
            'EVENT' ,
            'MARKET_START_TIME' ,
          # 'MARKET_DESCRIPTION',
          # 'RUNNER_METADATA',
        ] ,
        sort='FIRST_TO_START' ,
        max_results=100 ,
        lightweight=True)
    if not len(res):
        logger.error('Market catalogue listing is empty')
        trading.session_token = None
        raise self.retry(countdown=5 , max_retries=12)

    for cat in res:
        if 'venue' not in cat['event']:
        logger.error(f'No event venue in {cat}')
        continue
    try:
        event = parse_event(cat['event'])
        market = parse_market(event , cat)
        runners = parse_runners(market , cat['runners'])
    except:
        logger.warning(cat)
        raise
        logger.warning(f'BETFAIR: Scraped {len(res)} from market 
        catalogue')

@shared_task
def parse_runners(market , items):
    """Parses runners from MarketCatalogue object"""
    runners = []
    for runner_item in items:
        num = runner_item['metadata'].get('CLOTH_NUMBER')
        if not num:
            matches = re.match(r'^(\d+)' , runner_item['runnerName'])
            if matches:
                num = matches.groups(0)[0]
            else:
                logger.error(f'Could not match number for 
                {runner_item}')
        runner , created = Runner.objects.update_or_create(
            selection_id=runner_item['selectionId'] ,
            defaults={
                'market': market ,
                # default
                'name': runner_item['runnerName'].upper() ,
                'sort_priority': runner_item['sortPriority'] ,
                'handicap': runner_item['handicap'] ,
                # metadata
                'cloth_number': num ,
                'stall_draw': 
                runner_item['metadata'].get('STALL_DRAW') ,
                'runner_id': runner_item['metadata']['runnerId'] ,
            }
        )
        if created:
            logger.info(f'Created {runner}')
        else:
            logger.debug(f'Updated {runner}')
        runners.append(runner)
    return runners
CELERY_BEAT_SCHEDULE = {
'list_market_catalogue': {
    'task': 'trader.tasks.list_market_catalogue',
    'schedule': timedelta(seconds=5),
    'args': (['self'],)
},
'parse_runners': {
    'task': 'trader.tasks.parse_runners' ,
    'schedule': timedelta(seconds=5) ,
    'args': (['market'],['items'])
},

尝试:
def list\u market\u catalog(*args,**kwargs):
或从函数参数中删除
self
。@UsmanMaqbool我刚刚更新了答案并更改了第二个函数。我在原始代码中删除了self,但我现在在
parse_runner(市场、项目)