小编Rei*_*ica的帖子

为什么这个Go代码会死锁?

package main

import "fmt"
import "runtime"
import "time"


func check(id int) {
    fmt.Println("Checked", id)
    <-time.After(time.Duration(id)*time.Millisecond)
    fmt.Println("Woke up", id)
}

func main() {
    defer runtime.Goexit()

    for i := 0; i <= 10; i++ {
        fmt.Println("Called with", i)
        go check(i)
    }

    fmt.Println("Done for")
}
Run Code Online (Sandbox Code Playgroud)

我是Go的新手,所以任何指针都会很棒.我怎么去调试这样的东西?

您可以运行代码段http://play.golang.org/p/SCr8TZXQUE

更新:这<-time.After(time.Duration(id)*time.Millisecond)在游乐场没有线路的情况下工作 ,我想知道为什么?(正如@dystroy所说,这可能是因为游乐场处理时间的方式)

当我在本地尝试时,这是输出:

Called with  0
Called with  1
Checked 0
Called with  2
Checked 1
Called with  3
Checked 2
Called with  4
Woke up 0
Checked 3
Called with  5 …
Run Code Online (Sandbox Code Playgroud)

concurrency deadlock go goroutine

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

是否可以从经过身份验证的站点加载渐进式 Web 应用程序清单文件?

我在 SharePoint 文档库中有渐进式 Web 应用程序 index.html 页面和资产。我需要在访问 index.html 页面时进行身份验证。但是<link rel="manifest" href="manifest.json.txt">当从 index.html 页面请求时,作为链接的 manifest.json 文件没有所需的身份验证 cookie。请注意,SharePoint 不提供 .jon 文件,这就是它以 .txt 结尾的原因。有没有办法从经过身份验证的站点检索清单?

当我将清单放在可匿名访问的位置时,即在 SharePoint 之外(我现在使用我的保管箱),它就可以工作。在这种情况下,我需要为 start_url 指定完整路径。但这不是一个非常好的部署模型,因为我需要将文件部署到两个不同的位置......

basic-authentication progressive-web-apps

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

哈斯克尔中的“foreach”

此代码类型检查:

type T :: Type -> foreach (r :: Type) -> Type -> Type
data T k r a

type T' :: Type -> Type
type T' a = T a Identity a
Run Code Online (Sandbox Code Playgroud)
  • 为什么编译器在这里需要一个 kind Type -> Type(即Identity)类型?Identity如果您替换为 say ,它无法进行类型检查Int
  • 什么是foreach关键字,在 Haskell 中如何使用它?

haskell dependent-type

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

优雅的方式来抽象多个函数调用?

例:

>>> def write_to_terminal(fmt, *args):
...     print fmt % args
>>> LOG = logging.getLogger(__name__)
>>> info = multicall(write_to_terminal, LOG.info)
>>> debug = multicall(write_debug_to_terminal, LOG.debug)
>>> ...
>>> info('Hello %s', 'guido') # display in terminal *and* log the message
Run Code Online (Sandbox Code Playgroud)

有优雅的写作方式multicall吗?也许在标准库的帮助下......没有重新发明轮子?

python function

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

一种acylic有向图的BFS遍历算法

我正在寻找一个优雅的Python程序,可以完成BFS的几个DAG:

A->B如果A"依赖于"B(考虑到python包Foo"取决于"Bar:Foo-> Bar),则节点A连接到B().

在约7000个这样的节点图,我想这样的,对于所有可能的所有节点进行排序(i, j),其中1>=i<j<=7000.. depends(Ni, Nj)是假.depends(A,B)= True当且仅当A->B或"A"依赖于"B .."并且Nxx在排序列表中的位置出现的节点.

注意:节点可以有多个父节点.例如:A-> C和B-> C. 因此,根据上述排序规则,A和B必须在C之前.

python algorithm dependencies traversal graph

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

多个Either值的错误处理

我有两个either值,例如:

Either String Config  -- error string or config parsed
Either String Env     -- error string or environment variables detected
Run Code Online (Sandbox Code Playgroud)

我想将它们的值提取到此记录中:

type App = App { config :: Config, env :: Env }
Run Code Online (Sandbox Code Playgroud)

如果有错误则快速失败(Left其中一个值的值).

我可以使用两个case语句,但我想知道是否已经有一个我可以在这里使用的抽象?

理想情况下,我会在出错时记录消息并立即退出程序.

error-handling haskell either

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

要么内在也许错误处理

是否有一个Haskell模式可以避免编写这个自定义函数?想法是将Maybe中的Nothing作为错误处理(作为包装的一部分):

eitherMaybeHandle :: String -> Either String (Maybe a) -> Either String a
eitherMaybeHandle err = \case
  Left e ->
    Left e
  Right Nothing ->
    Left err
  Right (Just a) ->
    Right a
Run Code Online (Sandbox Code Playgroud)

error-handling haskell either maybe

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

将特定内容记录到文件的 Pythonic 方式?

据我所知,Python 记录器不能直接实例化,如文档所示:

请注意,记录器永远不会直接实例化,而是始终通过模块级函数实例化 logging.getLogger(name)

..这是合理的,因为您不应该为每个类/模块创建记录器对象,因为有更好的选择

但是,在某些情况下,我想创建一个记录器对象并向其附加一个文件,专门用于将一些特定于应用程序的输出记录到该文件;然后关闭日志文件。

例如,我有一个程序可以在PyPI中构建所有包。所以基本上假设for每个包都有一个循环。在循环内,我想“创建”一个记录器,附加一个文件处理程序(例如:/var/logs/pypi/django/20090302_1324.build.log)并将输出python setup.py build(以及其他内容)发送到该日志文件。完成后,我想关闭/销毁记录器并continue以类似的方式构建其他包。

所以你看……正常的 Pythonic 调用方式logging.getLogger在这里不适用。需要创建临时记录器对象。

目前,我通过将文件名本身作为记录器名称传递来实现此目的:

>>> packagelog = logging.getLogger('/var/..../..34.log')
>>> # attach handler, etc..
Run Code Online (Sandbox Code Playgroud)

我想问..有更好的方法吗?

python logging

0
推荐指数
1
解决办法
815
查看次数