所以我需要为列表中的所有项调用异步函数.这可以是一个URL列表和一个使用aiohttp的异步函数,它从每个URL获取响应.现在显然我不能做到以下几点:
['www.google.com','www.youtube.com','www.aol.com']中的url async:
我可以使用普通的for循环但是我的代码将同步操作,我失去了获得异步响应获取功能的好处和速度.
有什么方法可以转换列表,以便上述工作吗?我只需要将列表的iter()更改为aiter()方法吗?可以通过子类化列表来实现吗?也许将它封装在一个类中?
提前致谢!
(PS:我正在使用python 3.6)
我一直在尝试通过执行以下操作来注销django中站点的管理员:
from django.contrib.sites.models import Site
admin.site.unregister(Site)
Run Code Online (Sandbox Code Playgroud)
但是,这给了我一个错误,指出“ Site”未注册(即使它以前出现在admin中)。
如果我尝试执行以下操作,则不会出现任何错误,但“站点”仍保留在管理员中:
from django.contrib.sites.models import Site
admin.site.register(Site)
admin.site.unregister(Site)
Run Code Online (Sandbox Code Playgroud)
我需要网站应用,无法在设置中将其从INSTALLED_APPS中删除。但是,它的管理员对我完全没有用。对我在这里做错的任何想法吗?
谢谢!
我来自 C++ 背景,如果没有 Python 中的整个指针概念,我有点迷茫。或者至少还不清楚。例如,我想在 Python 中使用 OOP 创建一个滴答声游戏。我有几个这样的课程:
class Game(object):
def __init__(self, player1, player2):
self.board = [['','',''],
['','',''],
['','','']]
self.players = [player1, player2]
class Player(object):
def __init__(self, game, marking):
self.game = game
self.marking = marking # either 'X' or 'O'
Run Code Online (Sandbox Code Playgroud)
很明显,游戏需要引用两个玩家,而玩家也是游戏的一部分,因此应该引用游戏。但是,上面的代码不起作用,因为如果不先创建游戏,我就无法创建玩家。但是要创建一个游戏,我需要两个玩家。之后我可以通过执行以下操作来添加这些引用:player.game = some_game_reference但这似乎不符合 Python 风格且难以跟上。
完成此任务的最佳和最 Pythonic 的方法是什么?
我在组合异步生成器并实际运行它们时遇到了麻烦。这是因为我发现运行它们的唯一方法是通过事件循环,该事件循环返回可迭代而不是生成器。让我用一个简单的例子说明一下:
假设我有一个函数google_search,它通过抓取来搜索google(我不是故意使用API)。它接收一个搜索字符串,并返回一个搜索结果生成器。当页面结束时,该生成器不会结束,该功能将继续到下一页。因此,google_search函数返回的可能是几乎无限的生成器(从技术上讲,它总是会终止,但在Google上进行搜索时,您通常会获得数百万次点击)
def google_search(search_string):
# Basically uses requests/aiohttp and beautifulsoup
# to parse the resulting html and yield search results
# Assume this function works
......
Run Code Online (Sandbox Code Playgroud)
好的,现在我要制作一个函数,让我可以迭代多个google_search生成器。我想要这样的东西:
def google_searches(*search_strings):
for results in zip(google_search(query) for query in search_strings):
yield results
Run Code Online (Sandbox Code Playgroud)
这样,我可以使用简单的for循环来展开google_searches并获取结果。上面的代码效果很好,但是对于任何数量的搜索来说速度都很慢。该代码正在发送一个请求,以进行第一次搜索,然后进行第二次搜索,依此类推,直到最终产生结果。我想加快这个速度(很多)。我的第一个想法是将google_searches更改为异步函数(我正在使用python 3.6.3,并且可以使用await / async等)。然后,这将创建一个不错的异步生成器,但我只能在另一个异步函数或事件循环中运行它。使用run_until_complete(loop.gather(...))在事件循环中运行它会返回结果列表,而不是普通的生成器,这无法达到目的,因为可能有太多的搜索结果无法保存在列表中。
如何通过异步执行请求,同时使其仍然是普通生成器,来使google_searches函数更快(最好使用异步代码,但欢迎使用任何方法)?提前致谢!
默认情况下,Allauth的消息以文本文件的形式存储在模板目录中,它们类似于:
{% load i18n %}
{% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
Run Code Online (Sandbox Code Playgroud)
这些使用django的模板标签,但不是“ HTML友好的”。我想对这些样式进行样式设置,例如:
{% load i18n %}
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{% blocktrans %}You cannot remove your primary e-mail address ({{email}}).{% endblocktrans %}
</div>
Run Code Online (Sandbox Code Playgroud)
但是上面的代码只是将HTML呈现为文本。我不能将HTML放在模板中,而只能在模板中做{{message}},因为我想根据每个消息的偏向(至少是颜色!)来更改其中的一些内容。
我该怎么做?谢谢!
我有一个这样的模型:
class Publisher(models.Model):
...
class Author(models.Model):
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
class Article(models.Model):
author= models.ForeignKey(Author, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
现在我试图从给定的出版商“pub”获取所有文章。我试过做以下事情:
pub.article_set()
pub.authot_set().article_set()
以及其他失败的尝试。那么如何在不多次访问数据库的情况下检索给定发布者的所有文章的查询集?最有效的方法是什么?
提前致谢!
之前曾有人问过这个问题,但总会出现的答案是使用DjangoItem。但是它在github上指出:
通常对于写密集型应用程序(例如Web爬网程序)来说不是一个好的选择...可能无法很好地扩展
这是我问题的症结所在,我想以与我运行python manage.py shell以及从myapp.models import Model1进行操作时相同的方式使用Django模型并与之交互。使用查询如此处所示。
我已经尝试了相对导入,并将我的整个scrapy项目移到了django应用程序中,但都无济于事。
我应该将我的拼凑项目移到哪里进行这项工作?我该如何重新创建/使用所有在Scrapy管道内的Shell中可用的方法?
提前致谢。
python ×6
django ×4
asynchronous ×2
aiohttp ×1
c++ ×1
class ×1
css ×1
django-admin ×1
foreign-keys ×1
html ×1
inheritance ×1
iterator ×1
python-3.x ×1
scrapy ×1