小编cub*_*ube的帖子

在来自不同线程的回调中设置 asyncio.Future 的值

我有一个库,可以让我选择在外部作业完成时安排回调。使用此回调是否安全Future.set_result()?如果没有,实现这一目标的正确方法是什么?Future 的文档说它的方法不是线程安全的,所以我认为这可能有问题。

我的目标是使用来自 PyOpenCL 的 OpenCL 事件作为 asyncio 代码中的可等待对象。我在考虑这样的辅助函数:

def wrap_opencl_event(event):
    f = asyncio.Future()
    event.set_callback(pyopencl.command_execution_status.COMPLETE, lambda x: f.set_result(None))
    return f
Run Code Online (Sandbox Code Playgroud)

并以这种方式使用它:

async def do_slow_stuff():
    ev1 = pyopencl.enqueue_something()
    ev2 = pyopencl.enqueue_something_else(wait_for=[ev1])
    await wrap_opencl_event(ev2)
    process_results()
Run Code Online (Sandbox Code Playgroud)

python multithreading thread-safety python-3.x python-asyncio

4
推荐指数
1
解决办法
1038
查看次数

两个日期之间的秒数,包括闰秒

我正在摆弄 C++ 中的时间表示。

我想要一个严格单调的时间表示,可以很好地处理闰秒。在utc_clockC ++中20应该是能够做到这一点,而且因为我的编译器不支持此版本还没有,我使用HowardHinnant /日

为了更好地理解该库,我开始制作小型测试用例,但卡在了一个上面。我在插入闰秒之前和之后取两个日期,并检查这两个日期之间的持续时间实际上是否有额外的秒数。

这是测试用例:

TEST(DateTime, TimeLeap)
{
  using namespace std::chrono;
  using namespace date;

  // Two dates with a leap second in between
  // https://en.wikipedia.org/wiki/Leap_second
  auto t1 = clock_cast<utc_clock>(static_cast<sys_days>(2016_y/December/31));
  auto t2 = clock_cast<utc_clock>(static_cast<sys_days>(2017_y/January/1));

  EXPECT_EQ(duration_cast<seconds>(t2 - t1).count(), 24 * 3600 + 1);
}
Run Code Online (Sandbox Code Playgroud)

但它对我来说失败了:

common/tests/datetime.cpp:39: Failure
      Expected: duration_cast<seconds>(t2 - t1).count()
      Which is: 86400
To be equal to: 24 * 3600 + 1
      Which is: 86401
Run Code Online (Sandbox Code Playgroud)

似乎sys_clock和之间的转换utc_clock没有添加闰秒。

怀疑该问题是解决sys_days,我也试着做time_point_cast<seconds>(...) …

c++ c++-chrono c++20

4
推荐指数
1
解决办法
117
查看次数

LaTeX报告章节样式

如何更改LaTeX报告类中的章节样式?我发现了一些事情\makechapterstyle,但它似乎不适用于报告(或者至少它不适用于我的报告:-))我很确定必须有一些方法来改变它.

我知道LaTeX的编程并不多,但我不知道有什么更好的地方可以问这个.

latex coding-style

3
推荐指数
1
解决办法
2万
查看次数

使用来自 std::vector 的参数调用可变参数模板化函数

我需要将 std::vector 的元素转换为基于模板参数的类型,并使用这些参数调用函数。在伪代码中:

template <typename T...>
void foo(std::vector<std::string> v) {
    if (v.size() != sizeof...(T))
        throw std::runtime_error("Bad");

    bar(convert<T0>(v[0]), convert<T1>(v[1]), ..., convert<Tn>(v[n]));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何从参数包中获取元素索引,我认为使用折叠表达式会有某种技巧,但我无法弄清楚。

c++ variadic-templates c++17

3
推荐指数
2
解决办法
102
查看次数

C++函数接受指针和引用

我正在用C++编写一个库,并且有一些与模块一起工作的函数.一个例子看起来像这样:

void connect(Module *a, Module *b);
Run Code Online (Sandbox Code Playgroud)

问题是,如果函数接受也引用它有时会很方便(一些模块可能在堆栈上分配,一些模块在堆上,所有的&s和*s很快就会变得无聊和混乱).

现在我有内联函数,它接受引用,将它们转换为指针并调用原始函数.

inline void connect(Module &a, Module &b){
    connect(&a, &b);
}
Run Code Online (Sandbox Code Playgroud)

我不太喜欢这个解决方案,因为对于更多的函数,它会编写很多代码来编写,读取,编译,...

另一件正在考虑的事情就是增加Module::operator Module *()必须返回的东西this.

你对此有何看法?我错过了没有任何史诗般失败的可能吗?

谢谢.

c++ pointers overloading reference

1
推荐指数
3
解决办法
1224
查看次数