- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个数据处理管道,我们正在尝试使用 TPL Dataflow
框架。
管道的基本要点:
现在我们有一个现有的 Python 文件,它以非常缓慢和痛苦的方式执行上述所有操作 - 代码一团糟。
我的想法是以下查看 TPL Dataflow
.
BufferBlock<string>
将所有文件发布到TransformBlock<string, SensorDataDto>
检测是否导入该文件的谓词TransformBlock<string, SensorDataDto>
读取 CSV 文件并创建 SensorDataDto
结构 BatchBlock<SensorDataDto>
在 TransformBlock
中使用委托(delegate)批处理 100 个请求。
4.5。 ActionBlock<SensorDataDto>
将 100 条记录推送到数据库中。
ActionBlock
将 CSV 标记为已导入。我已经创建了前几个操作并且它们正在工作(BufferBlock
-> TransformBlock
+ Predicate
&& Process if hasn't)但我不确定如何继续流程以便我可以将 100 张贴到 BatchBlock
在 TransformBlock
内并连接以下操作。
这看起来正确吗 - 基本要点,我该如何处理 BufferBlock
TPL 数据流动方式中的位?
bufferBlock.LinkTo(readCsvFile, ShouldImportFile)
bufferBlock.LinkTo(DataflowBlock.NullTarget<string>())
readCsvFile.LinkTo(normaliseData)
normaliseData.LinkTo(updateCsvImport)
updateCsvImport.LinkTo(completionBlock)
batchBlock.LinkTo(insertSensorDataBlock)
bufferBlock.Completion.ContinueWith(t => readCsvFile.Complete());
readCsvFile.Completion.ContinueWith(t => normaliseData.Complete());
normaliseData.Completion.ContinueWith(t => updateCsvImport.Complete());
updateCsvImport.Completion.ContinueWith(t => completionBlock.Complete());
batchBlock.Completion.ContinueWith(t => insertSensorDataBlock.Complete());
在normaliseData
里面我调用的方法 BatchBlock.Post<..>(...)
, 这是一个好的模式还是应该以不同的方式构建?我的问题是我只能在所有记录都被推送后将文件标记为正在导入。
Task.WhenAll(bufferBlock.Completion, batchBlock.Completion).Wait();
如果我们有一批 100
,如果80
怎么办?被插入,有没有办法排干最后一个80
?
我不确定是否应该链接 BatchBlock
在主管道中,我会等到两者都完成。
最佳答案
首先,您不需要使用 Completion
在这方面,您可以使用 PropagateCompletion
链接期间的属性:
// with predicate
bufferBlock.LinkTo(readCsvFile, new DataflowLinkOptions { PropagateCompletion = true }, ShouldImportFile);
// without predicate
readCsvFile.LinkTo(normaliseData, new DataflowLinkOptions { PropagateCompletion = true });
现在,回到您的批处理问题。也许,你可以使用 JoinBlock<T1, T2>
或 BatchedJoinBlock<T1, T2>
在这里,通过将它们附加到您的管道并收集连接的结果,您可以全面了解正在完成的工作。也许你可以实现自己的 ITargetBlock<TInput>
这样您就可以按照自己的方式使用消息。
根据official docs ,这些 block 是贪婪的,并且一旦可用就从链接的 block 收集数据,所以如果一个目标准备好而另一个没有准备好,或者批处理 block 有 80%
,连接 block 可能会卡住。批量大小,所以你需要把它记在心里。在您自己实现的情况下,您可以使用 ITargetBlock<TInput>.OfferMessage
从您的来源获取信息的方法。
BatchBlock<T>
is capable of executing in both greedy and non-greedy modes. In the default greedy mode, all messages offered to the block from any number of sources are accepted and buffered to be converted into batches.In non-greedy mode, all messages are postponed from sources until enough sources have offered messages to the block to create a batch. Thus, a
BatchBlock<T>
can be used to receive1
element from each ofN
sources,N
elements from1
source, and a myriad of options in between.
关于c# - Blocked on 数据流的 block 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43255432/
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
.NET 框架:4.5.1 我在 Blend for visual studio 2015 中遇到一个奇怪的错误,我找不到它的来源。 如果我在 VS 中打开我的 WPF 解决方案,它会加载并运行良好。
我经常遇到这样的问题,与 Hierarchical RESTful URL design 非常相似 假设该服务仅提供用户上传文档。 POST, GET /accounts PUT, DELETE /a
在 Rails 应用程序中,我使用 devise 来管理我的用户,而我用来销毁 session 的链接不再有效。它正在工作,现在我添加了事件管理员,但没有。 我的链接是 :delete, :clas
我已经坚持了超过 24 小时,试图按照此处发布的其他解决方案进行操作,但我无法使其正常工作。我是 Rails 新手,需要帮助! 我想让我的/users/edit 页面正常工作,以便我可以简单地更改用户
Devise 在以下情况下不会使用户超时: 用户登录,关闭选项卡,然后在超时 + X 分钟内重新访问该 URL。用户仍处于登录状态。 如果选项卡已打开并且稍后刷新/单击,则超时可以正常工作。这意味着
我想使用这样的 slider 我希望该 slider 根据提供给它的值进行相应调整。到目前为止,我只能应用具有渐变效果的背景,但无法获得这种效果。请通过提供样式代码来帮助我。
您应该为每种方法创建一个请求/响应对象,还是应该为每个服务创建一个? 如果我在所有方法中使用它,我的服务请求对象中将只有 5 个不同的东西,因为我对几乎所有方法使用相同的输入。 响应对象将只有一个字典
我正在尝试在 REST 中对实体的附件进行建模。假设一个缺陷实体可以附加多个附件。每个附件都有描述和一些其他属性(上次修改时间、文件大小...)。附件本身是任何格式的文件(jpeg、doc ...)
我有以下表格: Blogs { BlogName } BlogPosts { BlogName, PostTitle } 博客文章同时建模一个实体和一个关系,根据 6nf(根据第三个宣言)这是无效的。
如果 A 类与 B、C 和 D 类中的每一个都有唯一的交互,那么交互的代码应该在 A 中还是在 B、C 和 D 中? 我正在编写一个小游戏,其中许多对象可以与其他对象进行独特的交互。例如,EMP点击
关于如何记住我与 Omniauth 一起工作似乎有些困惑。 根据这个wiki ,您需要在 OmniauthCallbacksController 中包含以下内容: remember_me(user)
设计问题: 使用 非线程安全 组件(集合,API,...)在/带有 多线程成分 ... 例子 : 组件 1 :多线程套接字服务器谁向消息处理程序发送消息... 组件 2 :非线程安全 消息处理程序 谁
我们目前正在设计一个 RESTful 应用程序。我们决定使用 XML 作为我们的基本表示。 我有以下关于在 XML 中设计/建模应用程序数据的问题。 在 XML 中进行数据建模的方法有哪些?从头开始然
我正在设计一个新的 XSD 来从业务合作伙伴那里获取积分信息。对于每笔交易,合作伙伴必须提供至少一种积分类型的积分值。我有以下几点:
设计支持多个版本的 API 的最佳方法是什么。我如何确保即使我的数据架构发生更改(微小更改),我的 api 的使用者也不会受到影响?任何引用架构、指南都非常有用。 最佳答案 Mark Nottingh
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
我想用 php 创建一个网站,其工作方式与 https://www.bitcoins.lc/ 相同。确实,就每个页面上具有相同布局但内容会随着您更改链接/页面而改变而言,我如何在 php 中使用lay
我有一个关于编写 Swing UI 的问题。如果我想制作一个带有某些选项的软件,例如在第一个框架上,我有三个按钮(新建、选项、退出)。 现在,如果用户单击新按钮,我想将框架中的整个内容更改为其他内容。
我正在尝试找出并学习将应用程序拥有的一堆Docker容器移至Kubernetes的模式和最佳实践。诸如Pod设计,服务,部署之类的东西。例如,我可以创建一个其中包含单个Web和应用程序容器的Pod,但
我是一名优秀的程序员,十分优秀!