如何通过期权来做平行工人?

时间:2019-02-21 18:31:46

标签: r doparallel

我使用options()和getOption()设置代码执行方式的选项。在顺序操作中,它工作正常。

但是当我使用doparallel包并行运行代码时,这些选项不会传递给工作进程。显示该问题的示例代码:

library(doParallel)
library(foreach)
registerDoParallel()

options(a=1)
getOption('a')
## [1] 1

foreach(id=1) %dopar% getOption('a')
## [[1]] 
## NULL

如您所见,选项向量未传递给并行工作器。我尝试在.Options中导出foreach,但得到的结果相同:

foreach(id=1, .export=c('.Options')) %dopar% getOption('a')
## [[1]] 
## NULL

所以这破坏了我在并行处理中的代码。

这是一个已知问题吗?我已经搜索了它,却没有找到任何东西。如何使doparallel将选项向量传递给它的工作人员?

1 个答案:

答案 0 :(得分:0)

一个答案是在每个%dopar%调用中手动设置它们:

class NewDragDropWidget(QListWidget):

    def __init__(self):
        super().__init__()
        self.setIconSize(QtCore.QSize(124, 124))
        self.setDragDropMode(QAbstractItemView.DragDrop)
        self.setDefaultDropAction(QtCore.Qt.MoveAction) # this was the magic line
        self.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.setAcceptDrops(True)

我希望%dopar%会自己解决这个问题,但是这个答案确实有用。