问题描述
我有几个功能(或转换):func1,func2,func3,...
和包含函数的字典
gameID
我正在考虑的是传递一个参数FUNCS = {
'1': func1,'2': func2,...
}
,该参数接受一个整数字符串,并使用funcs
遍历for
,并执行函数。
例如:
说我通过funcs
,然后函数执行如下:
funcs="1321"
并且函数按顺序执行:func1,func3,func2,func1。
与:相比有什么区别
with beam.Pipeline as p:
lines = (
p
| "read file" >> beam.io.ReadFromText('gs://some/inputData.txt')
)
for f in funcs: # 1321
lines = lines | FUNCS[f](#some other params)
我认为这是可能的;但这是一个好主意吗?平行光束会不会有不利之处?
真正的问题是:
首先建立管道,然后执行吗?
上面的
with ... lines = ... lines = lines | func1 | func3 | func2 | func1
循环和硬编码步骤会以相同的流水线结尾吗?for
循环对效率和最终结果有什么影响?
我正在使用Google Dataflow btw的flex模板。
解决方法
这是一个聪明的问题。
简单的答案是:是,首先构建管道,然后执行。
仅在退出static QString toString(HRESULT hr)
{
_com_error err{hr};
const TCHAR* lastError = err.ErrorMessage();
return QStringLiteral("Error 0x%1: %2").arg((quint32)hr,8,16,QLatin1Char('0'))
.arg(lastError);
}
static QString getLastErrorMsg()
{
QString s = toString(HRESULT_FROM_WIN32(GetLastError()));
return s;
}
int main(int argc,char* argv[])
{
QCoreApplication a(argc,argv);
QString m_src = QString("C:/Users/CybeX/Documents/BLMS/Repo/BLMS-Work-Dev/Meeting 2 - Requirements Document Discussion & Dev/2020-05-19 11.22.30 Someone Person's Zoom Meeting 98661954658/zoom_0.mp4");
QString m_dst = QString("C:/Users/CybeX/Documents/BLMS/Repo/BLMS-Work-Dev/Meeting 2 - Requirements Document Discussion & Dev/2020-05-19 11.22.30 Someone Person's Zoom Meeting 98661954658/zoom_0.mp42");
auto rc = CopyFileExW(m_src.toStdWString().c_str(),m_dst.toStdWString().c_str(),NULL,0);
if (rc == 0) {
QString s = getLastErrorMsg();
// copy failed
qDebug() << "Failed";
}
else {
qDebug() << "Copied"; // Always gets hit
}
// copy success
return a.exec();
}
块之后才执行管道。
您的with
循环完全没问题。