我的程序中有两个整数; 让我们称他们为" a"和" b".我想将它们加在一起,结果得到另一个整数.这些是常规的Python int对象.我在想; 如何将它们与Twisted一起添加?performAsynchronousAddition某处有特殊功能吗?我需要一个Deferred吗?反应堆怎么样?是否涉及反应堆?
我正在使用来自此站点的django-on-twisted脚本运行django应用程序.
所有请求都由nginx服务器提供服务,该服务器反向代理相关的扭曲请求.我有一个API的URL设置,它基本上只接收get请求并在发送响应之前对get参数进行一些处理.但是,当特定客户端访问api时,扭曲的服务器才会关闭.粘贴在下面的是Nginx日志:
the.ip.of.client - - [21/Apr/2012:11:30:36 -0400] "GET /api/url/?get=params&more=params HTTP/1.1" 499 0 "-" "Java/1.6.0_24"
Run Code Online (Sandbox Code Playgroud)
扭曲的日志只显示扭曲的停止工作.通过错误代码499,我假设客户端意外关闭了连接,我没有问题.客户是否收到回复对我来说并不重要.这是相关的django视图:
def api_url(request):
if request.GET:
get_param = request.GET.get('get', [''])[0]
more_param = request.GET.get('more', [''])[0]
#some processing here based on the get params
return HttpResponse('OK')
else:
raise Http404
Run Code Online (Sandbox Code Playgroud)
来自客户端的请求是有效请求,不会以不利方式影响处理.我从shell测试过它.当我在django开发服务器上尝试它时,它也以相同的方式崩溃,而没有留下任何接收请求的痕迹.从浏览器进行测试时,一切都运行良好.此外,扭曲的服务器适用于所有常规用例.这是我第一次遇到问题.任何帮助或指示将不胜感激.
如果我发送两条TCP消息,我是否需要处理后者到达之前的情况?还是保证按我发送的订单到达?我假设这不是Twisted特定的例子,因为它应该符合TCP标准,但是如果熟悉Twisted的人可以为我自己的安心提供特定于Twisted的答案,那将不胜感激:-)
我目前有一个用Django编写的非常简单的Web应用程序,我想在我的应用程序中实现类似回调/推送通知服务.
例如:当一个用户(客户端)将照片上传到服务器时,服务器会通知所有其他连接的用户该照片.
我想我可以使用Django信号在用户上传照片时产生回调,但是如何让Django向其他用户发布通知呢?此通知可以是警报,也可以只是将其他用户重定向到显示上传图片的新html.我更喜欢后者.
我是网络编程的初学者,所以我不确定这是否适合需要实现彗星或长轮询等实时内容的"实时网络应用程序".我的应用程序类似于聊天应用程序,除了我不提交文本文件而是提交图像文件.因此,我认为彗星解决方案可行.我已经尝试过很长一段时间看Orbited和Twisted但是没有运气用Django实现它,可能是因为我不明白如何用彗星解决方案完成我想要的东西.我希望更有经验的程序员能够指出我为了实现这一点我需要什么,或者我是否朝着正确的方向前进(使用彗星).
如果有人能给我一些关于如何继续的提示和提示,以及教程链接或指南,我将非常感激.
我在安装扭曲时遇到问题
pip --version
Run Code Online (Sandbox Code Playgroud)
来自/home/chris/GL/GLBackend/glenv/lib/python2.7/site-packages/pip-1.1-py2.7.egg(python 2.7)的pip 1.1
创建一个虚拟环境
chris@chris-mint ~/GL/GLBackend $ sudo virtualenv -p python2.7 glenv
Run Code Online (Sandbox Code Playgroud)
使用解释器运行virtualenv /usr/bin/python2.7 glenv/bin/python2.7中的新python可执行文件还在glenv/bin/python中创建可执行文件安装distribute ................ .................................................. .................................................. .................................................. .......................完成.安装pip ...............完成.
为了以防万一,我将启用所有权限
chris@chris-mint ~/GL/GLBackend $ sudo chmod -R 777 glenv
chris@chris-mint ~/GL/GLBackend $ source glenv/bin/activate
(glenv)chris@chris-mint ~/GL/GLBackend $ pip freeze
Run Code Online (Sandbox Code Playgroud)
argparse == 1.2.1 distribute == 0.6.24 wsgiref == 0.1.2
twisted在此处未列为已安装
(glenv)chris@chris-mint ~/GL/GLBackend $ sudo pip install twisted
Run Code Online (Sandbox Code Playgroud)
要求已经满足(使用--upgrade升级):twisted in /usr/local/lib/python2.7/dist-packages要求已经满足(使用--upgrade升级):zope.interface> = 3.6.0 in/usr/local/lib/python2.7/dist-packages(来自twisted)需求已经满足(使用--upgrade进行升级):在/usr/local/lib/python2.7/dist-packages中分发(来自zope.interface > = 3.6.0-> twisted)清理......(glenv)chris @ chris-mint~/GL/GLBackend $ pip uninstall twisted无法卸载要求扭曲,未安装存储完整登录/home/chris/.pip/ pip.log
但是当我安装它时它说它已经安装好了.强制安装:
sudo pip …Run Code Online (Sandbox Code Playgroud) 我曾经习惯twisted实现客户端.它工作正常.现在我希望能够将命令行参数传递给它,所以我需要实现一个twisted 插件.我已经执行了很多搜索来查找将显示如何将程序转换为插件的资源.但是我找不到我想要的东西.
这是我的client.py代码的相关部分:
import sys
import time
import os
import errno
import re
from stat import *
global runPath
runPath = '/home/a02/Desktop/'
from twisted.python import log
from GlobalVariables import *
from twisted.internet import reactor, threads, endpoints
from time import sleep
from twisted.internet.protocol import ClientFactory# , Protocol
from twisted.protocols import basic
import copy
class MyChat(basic.LineReceiver):
def connectionMade(self):
print "Connected to the server!"
EchoClientFactory.buildClientObject(self.factory, self)
self.runPythonCommands = RunPythonCommands ()
return
def connectionLost(self, reason):
print "Lost Connection With …Run Code Online (Sandbox Code Playgroud) 我在Twisted中开发反向代理时遇到问题.它有效,但似乎过于复杂和复杂.这很像是伏都教.
网上或书中是否有任何简单,可靠的异步程序结构示例?一种最佳实践指南?当我完成我的程序时,我希望能够以某种方式看到结构,而不是看着一碗意大利面.
可能重复:
Python内存分析器
我有一个相当复杂(大约20,000)的Python系列程序,经过一些开发后,它在运行时开始消耗越来越多的内存.找出所有内存使用的最佳工具和技术是什么?
通常这归结为意外地保持对对象的引用,或扩展模块错误(这不是特别可能,因为我们已经使用Python 2.4安装一段时间).
我们使用各种第三方库,如Twisted,Twisted Conch和MySQLdb.
所以我正在编写另一个基于Twisted的守护进程.它将像往常一样有一个xmlrpc接口,因此我可以轻松地与它进行通信,并让其他进程根据需要与它交换数据.
该守护进程需要访问数据库.我们一直在使用SQL Alchemy代替我们最新项目的硬编码SQL字符串 - 这些项目主要用于Pylons中的Web应用程序.
我们想对这个应用程序做同样的事情并重新使用利用SQL Alchemy的库代码.那么该怎么办?当然,因为该库是为Pylons应用程序编写的,所以每个人都习惯使用的所有直接阻塞样式代码,所有非阻塞都由Pylons通过线程,线程本地,范围会话等神奇地处理.上.
所以现在对Twisted我想我有点卡住了.我可以:
我也坚持使用Python 2.5.4 atm所以还没有2.6,我不认为我可以从未来进行导入以获得那里很酷的新多处理模块的东西.虽然我认为我们已经很好地处理了进程间通信,但这没关系.
所以我倾向于选项4,因为这样可以避免与选项1的逻辑重复的致命罪,同时也避免线程.
我的第一次尝试将是选项2,只是让事情继续进行,然后将对库代码的调用分离出来,如果它看起来好像很可能需要花费太长时间才能阻塞.伤心.也许Stackless Python和Twisted的组合在这里会很有趣.
有更好的想法吗?
这不再适用了,scrapy的API已经改变了.
现在文档的功能是" 从脚本运行Scrapy "但我得到ReactorNotRestartable错误.
我的任务:
from celery import Task
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals
from scrapy.utils.project import get_project_settings
from .spiders import MySpider
class MyTask(Task):
def run(self, *args, **kwargs):
spider = MySpider
settings = get_project_settings()
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()
Run Code Online (Sandbox Code Playgroud) twisted ×10
python ×8
asynchronous ×2
django ×2
addition ×1
celery ×1
database ×1
debugging ×1
memory-leaks ×1
nginx ×1
orbited ×1
pip ×1
protocols ×1
push ×1
scrapy ×1
sql ×1
sqlalchemy ×1
tcp ×1
virtualenv ×1