У меня есть приложение Django rest Framework, которое последовательно вызывает 2 задачи huey в методе создания сериализатора следующим образом:
...
def create(self, validated_data):
user = self.context['request'].user
player_ids = validated_data.get('players', [])
game = Game.objects.create()
tasks.make_players_friends_task(player_ids)
tasks.send_notification_task(user.id, game.id)
return game
# tasks.py
@db_task()
def make_players_friends_task(ids):
players = User.objects.filter(id__in=ids)
# process players
@db_task()
def send_notification_task(user_id, game_id):
user = User.objects.get(id=user_id)
game = Game.objects.get(id=game_id)
# send notifications
При запуске процесса huey в терминале, когда я нажимаю эту конечную точку Я вижу, что когда-либо вызывается только одна или другая задача, но не обе. Я запускаю huey с настройками по умолчанию (redis with 1 thread worker.)
Если я изменяю код так, что я передаю сами объекты как параметры, а не идентификаторы, и удаляю django запросы в методах @db_task
, кажется, все работает нормально.
Причина, по которой я первоначально использовал идентификаторы в качестве параметров, заключается в том, что я предположил (или где-то прочитал), что Хьюи использует json сериализацию по умолчанию, но после просмотра pickle
фактически является сериализатором по умолчанию.
Одна теория состоит в том, что, поскольку я работаю только с одним работником, и у меня есть метод @db_periodic_task
в приложении, процесс может обрабатывать только прослушивание задач или их выполнение в любое время, но не оба. Это способ работы сельдерея, когда вам нужен отдельный процесс для планировщика и рабочего, но это не упоминается в документации Хьюи.