小编Sch*_*ken的帖子

在Python和Eventlet中使用多个核心

我有一个Python Web应用程序,客户端(Ember.js)通过WebSocket与服务器通信(我正在使用Flask-SocketIO).除了WebSocket服务器之外,后端还有两件值得提及的事情:

当客户端提交图像时,在数据库中创建其实体,并将id放入图像转换队列中.工人抓住它并进行图像转换.之后,工作人员将其放入OCR队列,在那里它将由OCR队列工作者处理.

到现在为止还挺好.WS请求在不同的线程中同步处理(Flask-SocketIO使用Eventlet),并且繁重的计算操作异步发生(在单独的线程中也是如此).

现在问题是:整个应用程序在Raspberry Pi 3上运行.如果我没有使用它的4核,我只有一个主频为1.2 GHz的ARMv8内核.这对于OCR来说是非常小的力量.所以我决定了解如何在Python中使用多个内核.虽然我读到了GIL的问题但是我发现了多处理的地方The multiprocessing package offers both local and remote concurrency, effectively side-stepping the Global Interpreter Lock by using subprocesses instead of threads..正是我想要的.所以我立即取代了

from threading import Thread
thread = Thread(target=heavy_computational_worker_thread)
thread.start()
Run Code Online (Sandbox Code Playgroud)

通过

from multiprocessing import Process
process = Process(target=heavy_computational_worker_thread)
process.start()
Run Code Online (Sandbox Code Playgroud)

队列需要由多个核心处理,所以我不得不改变

from queue import Queue
queue = multiprocessing.Queue()
Run Code Online (Sandbox Code Playgroud)

import multiprocessing
queue = multiprocessing.Queue()
Run Code Online (Sandbox Code Playgroud)

同样.有问题:队列和线程库由Eventlet …

python multithreading multiprocessing eventlet flask-socketio

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

SwiftUI:如何在按钮单击+ API 调用后显示下一个视图

这听起来像是一个微不足道的任务,但我找不到解决这个问题的正确方法。可能我还没有内化“SwiftUI-ish”的思维方式。

我有一个带有按钮的视图。当视图加载时,有一个条件(已经登录?),在该条件下视图应该直接转到下一个视图。如果单击该按钮,则会触发 API 调用(登录),如果成功,还会重定向到下一个视图。

我的尝试是建立一个模型(ObservableObject)来保存变量“shouldRedirectToUploadView”,它是一个 PassThroughObject。一旦满足视图中的 onAppear 条件或单击按钮(并且 API 调用成功),该变量就会翻转为 true 并告诉观察者更改视图。

翻转模型中的“shouldRedirectToUploadView”似乎有效,但我无法使视图重新评估该变量,因此新视图将无法打开。

这是到目前为止我的实现:

该模型

import SwiftUI
import Combine

class SboSelectorModel: ObservableObject {

    var didChange = PassthroughSubject<Void, Never>()

    var shouldRedirectToUpdateView = false {
        didSet {
            didChange.send()
        }
    }

    func fetch(_ text: String) {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
            self.shouldRedirectToUpdateView = true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

风景

import SwiftUI

struct SboSelectorView: View {
    @State var text: String = ""
    @ObservedObject var model: SboSelectorModel

    var body: some View {
        return ZStack {
            if …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

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

SwiftUI 中的 WKWebView - 当用户与网站交互时如何切换视图?

我的情况如下:我有一个 SwiftUI 应用程序,想要显示一个 WebView。当用户点击该 WebView 中的某个按钮时,我希望用户被重定向到下一个 (SwiftUI) 视图。我使用 UIViewRepresentable ,因为这似乎是在 SwiftUI 中显示 WebView 的当前方式,因为它是 UIKit 的桥梁。问题是: UIViewRepresentable 没有body。那么我在哪里告诉视图切换?在通常的 SwiftUI 视图中,我会更新一个模型,然后对主体中的模型更改做出反应。

我设置了一个示例,其中在 WebView 中呈现https://www.google.com。当用户发送搜索查询时,协调器被调用,它调用 UIViewRepresentable 的函数:

视图- 这是应该通过显示另一个视图(使用NavigationLinks实现)对模型更改做出反应的视图

import SwiftUI

struct WebviewContainer: View {
    @ObservedObject var model: WebviewModel = WebviewModel()
    var body: some View {
        return NavigationView {
            VStack {
                NavigationLink(destination: LoginView(), isActive: $model.loggedOut) {
                    EmptyView()
                }.isDetailLink(false)
                .navigationBarTitle(Text(""))
                .navigationBarHidden(self.model.navbarHidden)

                NavigationLink(destination: CameraView(model: self.model), isActive: $model.shouldRedirectToCameraView) {
                    EmptyView()
                }
                .navigationBarTitle(Text(""))
                .navigationBarHidden(self.model.navbarHidden)
                Webview(model: self.model)
            }
        }
    } …
Run Code Online (Sandbox Code Playgroud)

webview ios swift wkwebview swiftui

5
推荐指数
2
解决办法
5015
查看次数

在Ember.js中输入type ="file"

我写了一个Ember组件,它代表一个可以处理文件上传的样式输入字段.为了达到这个目的,我使用了a <div>和a <input>.在<input>visibility: hidden一次的单击事件<div>被激发我火上无形的单击事件<input>在灰烬组件的动作处理.

我的问题是,在选择文件后,操作永远不会到达我的Ember组件.

附加文档input.hbs

<div {{action "add"}} class="floating-button">
    <span>+</span>
</div>
{{input multiple="true" action="upload" on="change" accept="image/png,image/jpeg,application/pdf" type="file"}}
Run Code Online (Sandbox Code Playgroud)

附加文档input.js

import Ember from 'ember';

export default Ember.Component.extend({
    actions: {
        upload() {
            console.log('This never happens');
        },
        add() {
            Ember.$("input[type='file']").click();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我想这与我触发动作中的click事件有关.这样第二次动作在视图中发生时就不会到达组件.

Ember版本:2.7.0

components action file input ember.js

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