在Go中将MySQL的快速转储器放到了JSON中.但是我发现从数据库中检索的所有内容都是[]byte数组.因此,我将所有内容编码为字符串,而不是原生的JSON整数或布尔值.
代码子集:
import (
"encoding/json"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func dumpTable(w io.Writer, table) {
// ...
rows, err := Query(db, fmt.Sprintf("SELECT * FROM %s", table))
checkError(err)
columns, err := rows.Columns()
checkError(err)
scanArgs := make([]interface{}, len(columns))
values := make([]interface{}, len(columns))
for i := range values {
scanArgs[i] = &values[i]
}
for rows.Next() {
err = rows.Scan(scanArgs...)
checkError(err)
record := make(map[string]interface{})
for i, col := range values {
if col != nil {
fmt.Printf("\n%s: type= %s\n", columns[i], reflect.TypeOf(col))
switch t …Run Code Online (Sandbox Code Playgroud) 我有以下代码片段
def send(self, queue, fd):
for line in fd:
data = line.strip()
if data:
queue.write(json.loads(data))
Run Code Online (Sandbox Code Playgroud)
这当然可以正常工作,但我有时会想知道是否有一种"更好"的方式来编写那种只用非空行的构造.
挑战在于它应该使用'fd'读取的迭代特性,并能够处理100+ MB范围内的文件.
更新 - 你急于得到这个问题的分数,你忽略了一个导入部分,即内存使用.例如表达式:
non_blank_lines = (line.strip() for line in fd if line.strip())
Run Code Online (Sandbox Code Playgroud)
是要将整个文件缓冲到内存中,更不用说执行两次strip()操作了.哪个适用于小文件,但是当你有100 + MB的数据(或偶尔100GB)时会失败.
部分挑战是以下工作,但是要阅读:
for line in ifilter(lambda l: l, imap(lambda l: l.strip(), fd)):
queue.write(json.loads(line))
Run Code Online (Sandbox Code Playgroud)
寻找魔术师!
最终更新:PEP-289对于我自己更好地理解[]和()与所涉及的迭代器之间的区别非常有用.
我有一个试图在"子类"上实现函数的程序,其中父进程可以检查接口是否已实现.对于透视图,它实际上是基于if方法存在来处理REST URL生成.
我遇到的是基于以下模式,当实现仅1时,IList和IGet接口都可以在TestController对象上找到.当调用IGet接口时,我感到恐慌.
我宁愿不在基础结构上做出Get/List的具体定义,然后必须覆盖它们,更愿意进行存在的测试,然后从那里开始.
这是一个游乐场链接以及https://play.golang.org/p/5j58fejeJ3
package main
import "fmt"
type IGet interface {
Get(int)
}
type IList interface {
List(int)
}
type Application struct {
name string
}
type BaseAppController struct {
*Application
IGet
IList
}
type TestController struct {
*BaseAppController
}
func (ctrl *BaseAppController) Init() {
fmt.Println("In Init")
if f, ok := interface{}(ctrl).(IGet); ok {
fmt.Println("Controller Found GET", f)
} else {
fmt.Println("Controller NOT Found GET", f)
}
if f, ok := interface{}(ctrl).(IList); ok {
fmt.Println("Controller Found LIST", …Run Code Online (Sandbox Code Playgroud) 我正在尝试在python3中运行python2程序,它具有以下Meta类定义.哪个在Py2上运行得很好.什么是让它与py2和py3兼容的"最佳"方法?
它在单元测试中失败了:
try:
raise Actor.DoesNotExist
except Actor.DoesNotExist:
pass
Run Code Online (Sandbox Code Playgroud)
失败是:
AttributeError: type object 'Actor' has no attribute 'DoesNotExist'
Run Code Online (Sandbox Code Playgroud)
基本元类定义是:
class MetaDocument(type):
def __new__(meta,name,bases,dct):
class DoesNotExist(BaseException):
pass
class MultipleDocumentsReturned(BaseException):
pass
dct['DoesNotExist'] = DoesNotExist
dct['MultipleDocumentsReturned'] = MultipleDocumentsReturned
class_type = type.__new__(meta, name, bases, dct)
if not class_type in document_classes:
if name == 'Document' and bases == (object,):
pass
else:
document_classes.append(class_type)
return class_type
class Document(object):
__metaclass__ = MetaDocument
Run Code Online (Sandbox Code Playgroud) 我们有以下盐状态,手表是否意味着要求?或者这条规则是最好的?
"celery-worker:":
supervisord.running:
- update: True
- watch:
- file: /etc/supervisor/conf.d/celery-worker.conf
- pkg: ingestion
- require:
- file: /etc/supervisor/conf.d/celery-worker.conf
- pkg: ingestion
Run Code Online (Sandbox Code Playgroud)