小编log*_*ion的帖子

Python asyncio:未引用的任务被垃圾收集器销毁?

我正在编写一个程序,它通过 AMQP 接受 RPC 请求以执行网络请求 (CoAP)。处理 RPC 请求时,aioamqp 回调会生成负责网络 IO 的任务。这些任务可以被视为后台任务,它们将无限期地运行以通过 AMQP 流式传输网络响应(在这种情况下,一个 RPC 请求会触发 RPC 响应和数据流)。

我注意到,在我的原始代码中,网络任务将在看似随机的时间间隔后(在完成之前)被销毁,asyncio 然后会打印以下警告“任务已被销毁但正在挂起”。此问题与此处描述的问题类似:https://bugs.python.org/issue21163

现在,我通过在模块级列表中存储硬引用来规避这个问题,这可以防止 GC 破坏任务对象。但是,我想知道是否有更好的解决方法?理想情况下,我想在 RPC 回调中调用等待任务,但我注意到这会阻止任何进一步的 AMQP 操作完成 -> 例如,创建新的 amqp 通道会停止,并且通过 amqp 接收 rpc 请求也会停止。然而,我不确定是什么导致了这种停顿(因为回调本身就是一个协程,我希望等待不会停顿整个 aioamqp 库)。

我在下面发布了 RPC 客户端和服务器的源代码,两者都基于 aioamqp/aiocoap 示例。在服务器中,on_rpc_request是 amqp rpc 回调,而send_coap_obs_request是网络协程,当删除“ obs_tasks.append(task) ”语句时,该协程会被销毁。

客户端.py:

"""
    CoAP RPC client, based on aioamqp implementation of RPC examples from RabbitMQ tutorial
"""

import base64
import json
import uuid

import asyncio
import aioamqp


class CoAPRpcClient(object): …
Run Code Online (Sandbox Code Playgroud)

python asynchronous python-asyncio

8
推荐指数
1
解决办法
2728
查看次数

Django模型继承,过滤模型

给出以下模型:(不要介意TextFields只是为了说明)

class Base(models.Model):
   field1 = models.TextField()

   class Meta:
      abstract=True

class Child1(Base):
   child1_field = models.TextField()

class Child2(Base):
   child2_field = models.TextField()


class Content(models.Model):
    aso_items = models.ManyToManyField('Base')
Run Code Online (Sandbox Code Playgroud)

根据这些定义,Content对象可以与多个Base对象相关联,例如.面试(=内容对象)可以与音乐家(= Child1对象),电影导演(= Child2)等联系.

现在,对于我的问题:是否可以根据aso_items字段指向的模型过滤Content对象?例如:假设我想要一个Queryset,其中包含与Child1的特定对象相关联的所有Content对象(例如,与音乐家Bob Dylan相关的所有访谈),我该如何实现?

此外,如果我想要一个包含与Child1对象相关的所有Content对象的QuerySet,那该怎么办?(例如,所有与音乐家相关的访谈)如何改变过滤?

在此先感谢ps:我在预览中遇到了一些空白问题,原谅我

django django-models django-orm

3
推荐指数
1
解决办法
4741
查看次数