相关疑难解决方法(0)

Python可以腌制lambda函数吗?

我已经阅读了许多线程,Python pickle/ cPickle不能pickle lambda函数.但是,以下代码使用Python 2.7.6:

import cPickle as pickle

if __name__ == "__main__":
    s = pickle.dumps(lambda x, y: x+y)
    f = pickle.loads(s)
    assert f(3,4) == 7
Run Code Online (Sandbox Code Playgroud)

那么发生了什么?或者说,酸洗lambdas的限制是什么?

[编辑]我想我知道为什么这个代码运行.我忘了(抱歉!)我正在运行无堆栈python,它有一种称为tasklet执行函数的微线程形式.这些tasklet可以暂停,腌制,打开并继续,所以我猜(在无堆栈邮件列表上询问)它还提供了一种方法来挑选函数体.

python lambda pickle python-2.7

48
推荐指数
3
解决办法
4万
查看次数

在芹菜任务中运行Scrapy蜘蛛

这不再适用了,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 scrapy celery

30
推荐指数
2
解决办法
1万
查看次数

如何在scrapy(Python)中间件中实现并发

编辑2

第二种方法.目前,我放弃了使用多个实例并配置了scrapy设置,不使用并发请求.它很慢但很稳定.我开了一笔赏金.谁可以帮助同时完成这项工作?如果我将scrapy配置为同时运行,则会出现分段错误.

class WebkitDownloader( object ):

    def __init__(self):
        os.environ["DISPLAY"] = ":99"
        self.proxyAddress = "a:b@" + PROXY_DEFAULT_HOST + ":" + str(PROXY_DEFAULT_PORT)


    def process_response(self, request, response, spider):
        self.request = request
        self.response = response
        if 'cached' not in response.flags:
            webkitBrowser = webkit.WebkitBrowser(proxy = self.proxyAddress, gui=False, timeout=0.5, delay=0.5, forbidden_extensions=['js','css','swf','pdf','doc','xls','ods','odt'])
            #print "added to queue: " + str(self.counter)
            webkitBrowser.get(html=response.body, num_retries=0)
            html = webkitBrowser.current_html()
            respcls = responsetypes.from_args(headers=response.headers, url=response.url)
            kwargs = dict(cls=respcls, body=killgremlins(html))
            response = response.replace(**kwargs)
            webkitBrowser.setPage(None)
            del webkitBrowser
        return response
Run Code Online (Sandbox Code Playgroud)

编辑:

我试图在此期间回答我自己的问题并实现了一个队列,但由于某种原因它不会异步运行.基本上当webkitBrowser.get(html=response.body, num_retries=0)忙碌时,scrapy会被阻止,直到方法完成.新请求未分配给其余的可用实例 …

python scrapy

6
推荐指数
1
解决办法
1381
查看次数

标签 统计

python ×2

scrapy ×2

celery ×1

lambda ×1

pickle ×1

python-2.7 ×1

twisted ×1