小编hel*_*arn的帖子

Python扭曲:迭代器和yield/inlineCallbacks

伙计们,我彻底搞糊涂了,所以我甚至不能正确地问问题,但是这里有:

我有一个使用inlineCallbacks的扭曲应用程序.现在我需要定义一个迭代器,这意味着生成器返回给调用者.但是,迭代器不能用inlineCallbacks装饰,可以吗?如果没有,那我该怎么做我这样的代码.

只是为了澄清:目标是process_loop需要每次调用,比方说5秒,它只能处理一大块,比方说10,然后它必须放手.但是,要知道10块(存储在缓存中,这是dict的dict),它需要调用一个返回延迟的函数.

@inlineCallbacks ### can\'t have inlineCallbacks here, right?
def cacheiter(cached):
    for cachename,cachevalue in cached.items():
        result = yield (call func here which returns deferred)
        if result is True:
            for k,v in cachedvalue.items():
                yield cachename, k, v

@inlineCallbacks
def process_chunk(myiter, num):
    try:
        for i in xrange(num):
            nextval = myiter.next()
            yield some_processing(nextval)
        returnValue(False)
    except StopIteration:
        returnValue(True)

@inlineCallbacks
def process_loop(cached):
    myiter = cacheiter(cached)
    result = yield process_chunk(myiter, 10)
    if not result:
        print 'More left'
        reactor.callLater(5, process_loop, cached)
    else:
        print 'All done'
Run Code Online (Sandbox Code Playgroud)

python twisted

18
推荐指数
2
解决办法
6933
查看次数

在mongodb中插入python对象

伙计们,我只是花了很多时间试着看一下 - 我应该遗漏一些基本的东西.

我有一个python对象,我想要做的就是在mondodb中插入这个对象.

这就是我所拥有的:

from pymongo import Connection
import json

conn = Connection()
db = conn.cl_database
postings = db.postings_collection

class Posting(object):
    def __init__(self, link, found=None, expired=None):
        self.link = link
        self.found = found
        self.expired = expired

posting = Posting('objectlink1')
value = json.dumps(posting, default=lambda x:x.__dict__)
postings.insert(value)
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

Traceback (most recent call last):
  File "./mongotry.py", line 21, in <module>
postings.insert(value)
  File "build/bdist.macosx-10.7-intel/egg/pymongo/collection.py", line 302, in insert
  File "build/bdist.macosx-10.7-intel/egg/pymongo/database.py", line 252, in _fix_incoming
  File "build/bdist.macosx-10.7-intel/egg/pymongo/son_manipulator.py", line 73, in transform_incoming
TypeError: 'str' object does …
Run Code Online (Sandbox Code Playgroud)

python json mongodb

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

在 python 脚本中以不同用户身份执行“ls”命令

各位,这就是我想要做的:我的脚本将以 root 身份运行,我希望以不同的用户身份执行各种命令(例如 ls、rm、touch 等)。

我遇到的问题是 usingpreexec_fn=os.setuid(userid))也设置了父进程的用户ID。请提出建议?preexec_fn实现这一目标的方法是错误的吗?进一步注意的是,这需要以扭曲的方式进行(我可能不是)。是getProcessOutputAndValue要走的路吗?如果是这样,该怎么做这样的事情?

print 'uid is %s' % os.getuid()
cmdstr = ['ls']
process = subprocess.Popen(cmdstr,stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setuid(10033))
print 'uid of parent after child startup is %s' % os.getuid()
process.wait()
print 'uid of parent after child finished is %s' % os.getuid()
Run Code Online (Sandbox Code Playgroud)

输出:

uid is 0
uid of parent after child startup is 10033
uid of parent after child finished is 10033
Run Code Online (Sandbox Code Playgroud)

python callback

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

Python:如何比较两个词典列表

伙计们,相对于python的n00b,试图找出两个字典列表的差异.

如果这些只是常规列表,我可以创建集合,然后执行' - '/ intersect操作.

但是,set操作不适用于词典列表:

>>> l = []
>>> pool1 = {}
>>> l.append(pool1)
>>> s = set(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)

python

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

标签 统计

python ×4

callback ×1

json ×1

mongodb ×1

twisted ×1