小编Boh*_*nik的帖子

Git/GitHub:外部代码的fork,子树合并或子模块?

我想将现有项目(托管在GitHub上)作为我项目的一部分(放入子目录),同时保持历史和更新该项目的能力.我发现可以有三种方法:

  1. fork原始项目,将原始内容移动到子目录中并将其推送到我的GitHub仓库.
  2. 初始化一个新的repo,用现有的repo 做一个子树合并并推送到我的GitHub repo.
  3. 克隆现有仓库,创建一个新的主仓库,将克隆仓库作为子模块放入主仓库中,推送.

(1)变体可能是GitHub的优选变体,因为它们可能共享源.但从逻辑上讲,我的项目不是现有项目的分支.而现有的只是一个模块.此外,我不确定将现有代码移动到子目录中是否可能不会出现问题.我可能更喜欢(2)变体,因为只有一个回购.(3)需要与几个回购合作,但逻辑上是最接近我的情况.

我对此进行了相当多的研究,但我并不确定.在这种情况下你会推荐什么?先感谢您!

git github

22
推荐指数
1
解决办法
3431
查看次数

在 Python 中将回调转换为生成器?

假设我们有一些库(例如用于 XML 解析)接受回调并在每次遇到某些事件时调用它(例如找到一些 XML 标记)。我希望能够将这些回调转换为可以通过 for 循环进行迭代的生成器。在不使用线程或收集所有回调结果(即使用延迟评估)的情况下,这在 Python 中是可能的吗?

例子:

# this is how I can produce the items
def callback(item)
    # do something with each item
parser.parse(xml_file, callback=callback)

# this is how the items should be consumed
for item in iter_parse(xml_file):
    print(item)
Run Code Online (Sandbox Code Playgroud)

我试图研究是否可以使用协程,但似乎协程对于从生产者推送数据很有用,而生成器将数据拉到消费者。

自然的想法是生产者和消费者将成为来回 ping 执行流程的协程。

我已经设法让生产者 - 消费者模式与 asyncio 循环一起工作(以类似于这个答案的方式)。但是它不能像 for 循环中的生成器一样使用:

import asyncio

q = asyncio.Queue(maxsize=1)

@asyncio.coroutine
def produce(data):
    for v in data:
        print("Producing:", v)
        yield from q.put(v)
        print("Producer waiting")
    yield from q.put(None) …
Run Code Online (Sandbox Code Playgroud)

python generator callback coroutine

5
推荐指数
0
解决办法
709
查看次数

标签 统计

callback ×1

coroutine ×1

generator ×1

git ×1

github ×1

python ×1