我使用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将选项向量传递给它的工作人员?
答案 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%会自己解决这个问题,但是这个答案确实有用。